我是Promise的新手,所以我正在尝试Bluebird的Promise API。我有以下方法返回Promise.try()
CheckDb-承诺方法
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函数的resolved
方法的then
组件返回未定义。
答案 0 :(得分:1)
尝试不使用此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”方法。
如果有以下情况,您将明确使用resolve方法:
由您创建的承诺,如果您想“承诺”不是承诺的内容,例如下面的示例:
返回新的Promise(函数(解决,拒绝){ ... resolve(value);
})
这不是您的情况。 (编辑了答案的这一部分,以免造成误解)