2017-05-16 6 views
1

私は自分の仕事のために機能しています。私は交差点に来ました。私はAjaxを全く新しくしており、ブラウザとは対照的にAjaxリクエストを手動で処理するキューを実装しようとしています。私はいくつかの調査を行い、this answerを見ましたが、ウェブサイト全体が動的なので、私が送信しようとしているリクエストは事前に宣言されません。ここに記載されているJQuery.when()関数と一緒にコードを使用する方法はありますか?キューにAjaxリクエストを動的に追加する

$.when(d1).done(function(var d2=$.Deferred()) { 
    d2.resolve(); 
} 
d1.resolve(); 

しかし、この実装は私のために働いていません。 私は得ることができるすべてのおかげで!

答えて

1

ES6の約束事でリクエストをラップしてから配列に追加し、配列を引数としてPromise.all()を呼び出すことができます。ドキュメント経由:

Promise.all()メソッドは、反復可能な引数での約束の すべてが解決したときに解決し、または拒否する最初の約束の理由で を拒否し、単一の約束を返します。

要求がどこから来たのかは問題ではなく、解決または拒否するだけです。

それは、このような小さな何かを見てね:

 let promiseArray = []; 
 
     for (let i = 0; i < 3; i++) { 
 
      let promise = new Promise((resolve, reject) => { 
 
       $.ajax({ 
 
        url: url, 
 
        type: 'GET', 
 
        success: data => resolve(data), 
 
        error: err => reject(err) 
 
       }); 
 
      }); 
 
      promiseArray.push(promise); 
 
     } 
 
     Promise.all(promiseArray).then((data) => { 
 
      //Will return an array of the successful requests, or will reject on the first rejected request 
 
      console.log(data); 
 
     });

support for ES6 promisesはまだ非常に普遍的ではないが、私は念のためにtranspilerを使用したいが、それはそうですPromise.allのようなあなたを助けることができます。

関連する問題