蓝鸟的承诺决心返回未定义



我是Promise的新手,所以我尝试了Bluebird的Promise API。我有以下返回Promise.try()的方法

CheckDb-Promise方法

const Prom = require("bluebird")
..........
..........
let checkDb = () => {
return Prom.try(() => {
SomePromiseMethod().then(result => {
if (//some condition) {
let resp = { 
res: result, 
somethingelse : somethingelse 
}
return Prom.resolve(resp)
}
else 
return Prom.reject(new Error("some reason"));
}, err => {
return Prom.reject(err);
})
.catch(err => {
return Prom.reject(err);
});
});
}

SomeTask-调用promise方法的方法

exports.someTask = () => {
checkDb().then(resolved => {
console.log(resolved) // coming undefined
}, 
rejected => {
console.error(rejected);
})
.catch(err => {console.error(err)});
}

这里的问题是Promise函数的then方法的resolved组件返回未定义。

我调查了这个和这个,但没搞清楚。

尝试在不使用此Prom.resolve的情况下直接返回值,如下所示:

...
return SomePromiseMethod().then(result => {
if (//some condition) {
let resp = { 
res: result, 
somethingelse : somethingelse 
}
return resp
}
else 
throw new Error("some reason"));
}
...

如果您在promise的"then"方法中,则通过返回一个值来解析它,该值将传递给链中的下一个"then"方法。

如果你有,你会显式地使用解析方法

  • 一个"手动"创建的defer,您想要解决它
  • 一个由你创建的承诺,如果你想"承诺"一些不是承诺的东西,比如下面的例子:

    返回new Promise(函数(解析、拒绝({。。。解析(值(;

    })

这不是你的情况。(为了避免误解,编辑了这部分答案(

最新更新