我是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(函数(解析、拒绝({。。。解析(值(;
})
这不是你的情况。(为了避免误解,编辑了这部分答案(