【发布时间】:2016-02-22 18:23:20
【问题描述】:
我正在将 rethinkDB 与 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 结果的已完成结果?
【问题讨论】:
-
它究竟是如何失败的?您收到错误消息吗?您得到的结果是否与预期不同?
-
yield { q1: r.db(" "), q2: r.db(" ")};. -
@nils 我更新了我的问题,谢谢。
-
@torazaburo 我不确定你的意思是什么?
-
我的意思是,如果你返回一个对象,那么每个属性的值将被并行等待,当所有值都解决后,产量将“返回”,评估其属性值为的并行对象承诺的已解决值。换句话说,不要让出单个值,然后再让出一个让出的对象;相反,使用包含所有异步元素的单个对象产生一次。
标签: node.js promise ecmascript-6 yield rethinkdb