Pg-promise:空洞的承诺

时间:2017-02-27 11:27:11

标签: promise generator bluebird pg-promise

我目前正在使用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({}) });
}

}

1 个答案:

答案 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解析一样。