在then()块

时间:2017-02-19 23:32:32

标签: javascript node.js promise

我有一个承诺链如下:

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.
});

3 个答案:

答案 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”不会被调用。

Use Promise.resolve

function performTaskD() {
   return Model.something().
   then(function(result) {             
        something something with result; //BREAKPOINT 1
        Promise.resolve(result)
   }); 
}