首頁  >  文章  >  web前端  >  $.Deferred(),for迴圈內非同步請求問題的解決方法

$.Deferred(),for迴圈內非同步請求問題的解決方法

一个新手
一个新手原創
2017-10-07 11:39:261838瀏覽

問題:有一個數組,數組中每一個元素非同步請求後端獲得對應的內容進行操作。

var arr=[];for(let i=0;i<arr.length;i++){
    $.post("请求地址",“传递数据”,function(){
         //异步请求后的操作
   })
}

for循環中使用非同步請求時出現的問題就是:非同步請求是不阻塞主程序,當非同步請求出資料的時候,主程式可能已經結束,這就給我們程式帶來問題。

如何在for迴圈內使用非同步請求,同時確保資料的執行順序?

解決方法:$.Deferred()

var lives=[……];
var defer = $.Deferred(); 
defer.resolve($("#aa").append("没有意义")); //该句为必须的,即使什么也不需要操作
$.each(lives,function(i,e){  
  defer = defer.then(function () {  
      return $.ajax({      //进行异步请求操作
        url:"请求地址",  
        type:&#39;post&#39;,
        data:{            //异步请求的数据
          "username":lives[i].username,
          "userId":lives[i].id,
        },
        dataType: "jsonp",
        success:function(data){  
          //异步请求后的操作
        }  
    })
  });  
});

#另外$.deferred()相關內容還有很多

以上是$.Deferred(),for迴圈內非同步請求問題的解決方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn