我目前正在使用pg-promise和Bluebird开发一个生成器:
function * getOrRegisterCurrentFriendIfProvided(t)
应该返回一个空的promise(如果t.ctx.context未定义) NB:纯蓝鸟的一个例子:
yield new Promise(function (resolve) { resolve({}) });
或调用另一个函数(提供结果):
yield t.task.call(params.friend,anotherFunction);
用pg-promise表达我的空Promise的任何方式(不使用像t.none这样的查询(“BYPASS QUERY”))?
通过以下示例,当我这样做时:
db.task(getOrRegisterCurrentFriendIfProvided)
.then(function(result){
console.log(result) // gives me undefined
})
我未定义。我确信当t.ctx.context未定义时出现问题
编辑:完整代码:
function * getOrRegisterCurrentFriendIfProvided(t) {
let params = t.ctx.context;
if (params.hasOwnProperty("friend")) {
yield t.task.call(params.friend,anotherFunction);
} else {
// returns a empty result ( {} ) promise , just to make promise chain not angry
yield new Promise(function (resolve) { resolve({}) });
}
}
答案 0 :(得分:0)
你从任务中获得undefined
的原因是因为你的回调没有返回任何内容。
将其更改为:
function * getOrRegisterCurrentFriendIfProvided(t) {
let params = t.ctx.context;
if (params.hasOwnProperty("friend")) {
return yield t.task.call(params.friend, anotherFunction);
}
}
我还删除了else
部分,因为它在那里完全没用,因为你使用它的方式,即返回任何内容与使用undefined
解析一样。