2016-12-01 54 views
0

我必須按順序調用函數,但不知何故它們獨立工作。訂購函數調用

這裏的功能是:

​​

當我運行它,它看起來像:

一個工作

C工作

B工作

但有時:

C工作

一個工作

B工作

如何訂購它們?

+0

'then'應該是一個函數,以便它可以在異步操作完成時執行它。你寫它的方式,你只是儘可能快地執行所有3個函數。 –

+1

人們仍然偏愛jQuery而不是承諾?奇怪的。 – GottZ

+0

'a()。then(b).then(c)'?所有三個都必須返回'$ .ajax'或其他。 – georg

回答

3

您可以使用then法諾連鎖狀物體。注意thendone/fail之間的差異,完成回調傳遞給then可以爲控制流的其餘部分返回一個新的承諾類對象。這就是爲什麼你可以做鏈接。見the documentation

a().then(b).then(c).done(function() { // the last promise has been resolved }); 

所有的函數都應該return這個工作的承諾對象。所以你的b應該看起來像這樣。

function b(){ 
    return Ajax_Call_2(); 
} 

Ajax_Call本身應該返回ajax呼叫,像return $.ajax(...)

請注意,由於bc都會返回承諾,因此您可以直接將它們傳遞給then

+0

謝謝。問題已解決,當我添加「返回」 – NewPHPer

3

您可以鏈接它們,以便通過返回他們:

$.when(a()).then(function() { 
    return b(); 
}).then(function() { 
    return c(); 
}).then(function() { 
    console.log("Done!"); 
}); 
+0

您可以直接傳遞這些函數,而無需將它們包裝到匿名函數中。 –

+0

但是,也不是a,b或c答應 –

+0

@ A.沃爾夫好點,我不夠小心。但顯然他們應該回報這個承諾。 –