Я использую rethinkDB с node.js. Следующий запрос работает отлично:Node.js синхронно возвращает результат множественного асинхронного выхода
function myFn() {
return co(function *() {
let query;
query = yield r.db("my-db")
.table("app")
.filter(r.row("id").eq(id))
.run(conn);
return query.toArray();
});
}
Я хотел бы вернуть результат многократного yield
асинхронно, однако следующий сбой:
function myFn() {
return co(function *() {
let query, query2;
query = r.db("my-db")
.table("app")
.filter(r.row("id").eq(id))
.run(conn);
query2 = r.db("my-db")
.table("app")
.filter(...)
.run(conn);
return yield {q1 : query, q2 : query2};
});
}
Тогда я должен позвонить toArray()
по каждому элементу, поэтому на вызова функции я:
// using ramda.js
var res = R.map((el) => {
return el.toArray();
}, yield myFn);
Однако я получаю:
{
"q1": {
"isFulfilled": false,
"isRejected": false
},
"q2": {
"isFulfilled": false,
"isRejected": false
}
}
то странное тоже:
// this works perfectly
return q.toArray();
// this returns the following :
return {q: q.toArray()};
"q": {
"isFulfilled": true,
"isRejected": false,
"fulfillmentValue": [ ... ]
}
Я подозреваю, что я что-то упускаю о том, как yield
работы, так как я могу вернуть отработанный результат нескольких yield
результатов?
Как это не в состоянии точно? Вы получили сообщение об ошибке? Получаете ли вы другой результат, чем ожидалось? – nils
'yield {q1: r.db (" "), q2: r.db (" ")};'. –
@nils Я обновил свой вопрос, спасибо. – nha