2017-08-11 30 views
0

我已經閱讀了許多關於如何使用done()和$ .ajax()的不同文章。據我瞭解,ajax返回一個promise,所以done()應該在完成時執行,這似乎正在發生,但是在each()循環中,一旦達到第一個ajax函數,第二個循環會在第一個循環循環仍在處理中。使用each()和ajax()done()同步處理ajax

這是問題的一個基本的jsfiddle:

https://jsfiddle.net/kLja50xa/1/

我期望的結果是:

1-1 2-1 1-2 2-2

我試圖請求推到一個數組的選項,但這意味着更多的嵌套each()ajax()循環具有相同的問題?

我需要按順序處理這些數據的原因是循環中的一些實例需要用戶輸入。

我可以強制使用async:false所需的結果。但出於顯而易見的原因,我想避免這種情況。而且這對腳本有額外的影響,因此我無法定位並更新跟蹤消息,通知用戶進程在哪裏。

+1

如果要強制排序,那麼你就不能只是發射所有異步請求在一次函數。 – Phylogenesis

+0

@Phylogenesis - 我不想一次性全部解除它們,這就是爲什麼我一旦收到第一個結果就使用done()來觸發下一個請求的原因。你有關於如何做到這一點的建議? – n00bstacker

回答

1

我不認爲是可能的循環....嘗試使用,將調用它的自我一旦Ajax是做

fiddle

eachArray(陣列)的功能;

function eachArray(array){ 
    $i++; 
    console.log('1-'+$i); 
    ajax.done(function() { 
    console.log('2-'+$i); 
    if($i<array.length){ 
     eachArray(array); 
    } 
    }) 
} 

另一個ES6很酷的功能將使用generators實際上是暫停其代碼,直到你再次調用

+0

非常簡單!謝謝! – n00bstacker