2017-09-04 61 views
0

之前,我有以下代碼需要幫助在等待承諾返回

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'的結果。我可能知道這是爲什麼嗎?

+0

我不明白你怎麼會從該代碼得到'2 1'。請提供[mcve] – Jamiec

回答

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?

+0

@rotatingFan在評論中很難閱讀代碼。如果您的問題有更新(使用新代碼),請點擊您的問題下的編輯按鈕,然後放入。 – Jamiec

+0

已更新。第一次使用stackoverflow。 = X – rotatingFan