ホームページ  >  記事  >  ウェブフロントエンド  >  $.Deferred()、for ループの非同期リクエストの問題の解決策

$.Deferred()、for ループの非同期リクエストの問題の解決策

一个新手
一个新手オリジナル
2017-10-07 11:39:261885ブラウズ

質問: 配列があり、配列内の各要素はバックエンドに非同期的にリクエストして、操作に対応するコンテンツを取得します。

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。