在返回之前需要帮助等待承诺

时间:2017-09-04 07:52:28

标签: jquery

我有以下代码

var a = ajax1();
var b = ajax2();

$.when(a,b).done(function(){
  var d = function123();
  $.when(d).done(function(){//doSomething});
});

function function123(){
    var c = ajax3();
    return c.promise();
}


return $.when(a,b,c).promise()//???;

如何在返回功能之前等待一切完成?

编辑: 我使用以下代码测试代码:

 var e = $.when(a,b)

.done(function(){
     var d = function123();
     d.done(function(){
        console.log('1');
     });
     return d.done(function(){//doSomething});  
   });

   e.done(function(){
      console.log('2');
   });

我的回复结果为' 2 1'。但是我期待的结果是' 1 2'。 我可以知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

  

如何在返回功能之前等待一切完成?

你不喜欢!你回复承诺,当它被解决(或被拒绝)时,你继续做你正在做的事情。

var e = $.when(a,b).done(function(){
  var d = function123();
  return d.done(function(){//doSomething});  
});

注意添加return - 这将返回您的承诺。通过将d.done的响应设置为另一个变量(在这种情况下为e),您将获得一个在内部所有内容都得到解决后将得到解决的承诺。

e.done(function(){
   //everything is done
});

另请阅读本Q / A的完整内容:How do I return the response from an asynchronous call?