簡體   English   中英

如何正確鏈接ajax調用?

[英]How do I chain ajax calls properly?

使用jQuery 3.2.1,我將調用鏈接到$ .ajax,如下所示:

function get(i) {
    return $.ajax(...)
      .done(function() { console.log('get done: ' + i) })
      .fail(function() { console.log('get failed: ' + i) })
}

var p = Promise.resolve();
for (var i = 0; i < len; i++) {
    p = p.then(get(i));
}

p.done(function() { console.log('Finished') });

並且我希望對i = 1的ajax調用在解決對i = 0的調用之前不會執行。 同樣,最終的done()應該等待所有調用按順序執行

實際上,在看到其他內容之前,我已經看到“完成”,並且“完成”以隨機順序返回(我猜第一個完成的首先返回)。

我已經習慣了藍鳥在哪里工作。 我究竟做錯了什么?

*附錄一*

為了補充上述內容,我正在加載具有依賴項的javascript文件,因此需要按順序加載。 因此,第一個必須在啟動第二個提取之前完成,否則依賴項將失敗

有兩個問題:

  • get函數將立即執行,而then方法應獲取對該函數的引用,以供Promise實現以后執行。 因此,請替換:

     p = p.then(get(i)); 

    與:

     p = p.then(get.bind(null,i)); 
  • JavaScript的本機承諾不會公開done方法,因此請替換:

     p.done(function() { console.log('Finished') }); 

    與:

     p.then(function() { console.log('Finished') }); 

你應該還添加了一個catch調用最終承諾。

更正的版本:

 function get(i) { return $.ajax('https://jsonplaceholder.typicode.com/posts/'+(i+1)) .done(function() { console.log('get done: ' + i) }) .fail(function(err) { console.log('get failed: ' + i) }) } var len = 4; var p = Promise.resolve(); for (var i = 0; i < len; i++) { p = p.then(get.bind(null,i)); } p.then(function() { console.log('Finished') }) .catch(function () { console.log('Error occurred') }); 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM