如何在promise调用后的代码之前执行promise对象成功函数中的代码?

时间:2014-10-28 14:12:45

标签: javascript jquery promise

我有一个名为handleWidgetDrop的函数。在函数中我调用另一个函数insertBlankWidget,它在返回promise对象时执行某个函数。问题是在函数调用insertBlankWidget之后handleWidgetDrop中的代码在promise对象中的代码之前执行。在调用insertBlankWidget()之后的代码之前执行promise对象成功之后,如何撤消此操作并执行函数中的代码。

handleWidgetDrop:function (){
    //some lines 
    this.insertBlankWidget();
    //Lines after insertBlankWidget call
}
  
insertBlankWidget:function(){
    var promise=this.getWidgetModel();
    promise.done(function(){
       //code which must be executed before Lines after insertBlankWidget
    });
}

2 个答案:

答案 0 :(得分:3)

只需在承诺上链接.done函数即可。但要做到这一点,您必须从insertBlankWidget

返回承诺
insertBlankWidget:function(){
    var promise=this.getWidgetModel();
    promise.done(function(){
       //code which must be executed before Lines after insertBlankWidget
    });
    return promise;
}

然后您就可以链接到handleWidgetDrop

handleWidgetDrop:function (){
    //some lines 
    this.insertBlankWidget().done(function(){
        //Lines after insertBlankWidget call
    });
}

答案 1 :(得分:0)

您可以使用所谓的回调函数。

修改insertBlankWIdget以使其接受函数作为参数,并在承诺完成时调用该函数。

insertBlankWidget:function( callback ){
    var promise=this.getWidgetModel();
    promise.done(function(){
       //code which must be executed before Lines after insertBlankWidget
       callback();
    });
}

然后是handleWidgetDrop

handleWidgetDrop:function (){
    //some lines 
    this.insertBlankWidget(
        function()
        {
            //Lines after insertBlankWidget call
        }
    );
}