Patrick1870
Patrick1870

Reputation: 353

Horizon/RethinkDB api

So I have one error and two questions about Horizon. (http://horizon.io/docs/) I have a simple table and 1 record inside, this is the row:

id: "o34242-43251-462...",
user_id: "3lw5-6232s2...",
other_id: "531h51-51351..."

When I run hz serve I'm getting this error:

Unexpected index name (invalid field): "hz_[["user_id"],[["other_id","0"]]]".

Okay, okay, invalid field... But I didn't find any informations about "valid" fields. Anybody knows the answer? What can I do?

My questions:

  1. How to run Horizon "forever" on ubuntu? Now I'm using just hz serve and "&",
  2. If I have few queries, for example:

    let table = this.horizon('firstTable');
    let table2 = this.horizon('secondTable');
    
        table.find(someId).fetch().subscribe((item) => {
           //and then I want to run other query, e.g: 
           table2.find(item.id).fetch().subscribe((value) => {
           //and here again run other query... <-- how to avoid this?
           });
        });
    

    How to e.g return a value from horizon's query, and then use this value inside other query? I don't want to write it all in one function...

Thanks for any help.

Upvotes: 0

Views: 111

Answers (1)

Moti Azu
Moti Azu

Reputation: 5442

Since 'fetch' returns an RxJS observable, and it yield one result only, you can use 'toPromise' to consume it in a convenient fashion.

let table = this.horizon('firstTable');
let table2 = this.horizon('secondTable');

let item1 = await table.find(someId).fetch().toPromise();
let item2 = await table2.find(item1.id).fetch().toPromise();

Or without ES7 await, just using Promise.then:

table.find(someId).fetch().toPromise().then((item1) => {
    table2.find(item1.id).fetch().toPromise().then((item2) => {
      // take over the world from here
    });
});

Upvotes: 1

Related Questions