我有一个承诺链如下:
return performTaskA().
then(performTaskB).
then(performTaskC).
then(performTaskD).
then(performTaskE);
performTaskD
如下:
function performTaskD() {
Model.something().
then(function(result) {
something something with result; //BREAKPOINT 1
});
}
当我运行上面的承诺链时,BREAKPOINT 1永远不会被击中,控件将进入performTaskE
。
但是,当我单独调用函数performTaskD()
时,BREAKPOINT 1确实会受到影响。在承诺链的情况下,我做错了什么?
如果我在performTaskD
中退回承诺,我仍然会遇到同样的问题。唯一的区别是控件永远不会进入performTaskE
并且进程退出。
为清楚起见,performTaskD
如下:
AccountModel.findById(acctId).
then(function (account) {
destAccount = account; //destAccount is a var declared in the outer scope.
});
答案 0 :(得分:3)
return
Promise
s
function performTaskD() {
return Model.something().
then(function(result) {
return something something with result; //BREAKPOINT 1
});
}
答案 1 :(得分:0)
根据Mongoose documentation Exception in thread "main" java.lang.VerifyError: Stack map does not match the one at exception handler 98
不会返回承诺。您需要致电Model.find(something)
。 Model.find(something).exec()
应该是这样的:
performTaskD
答案 2 :(得分:0)
在解决承诺时调用“then”函数。在你的任务函数中,你处理函数本身的promise,所以链的其余部分“then”不会被调用。
function performTaskD() {
return Model.something().
then(function(result) {
something something with result; //BREAKPOINT 1
Promise.resolve(result)
});
}