2016-06-02 10 views
1

関数内でAPIに複数回要求を実行する必要があります。私はすべての回答を一度得たら、すべての回答を一括して処理する必要があります。これを行うには最高のJSデザインは何ですか?jsで一連の非同期タスクが完了するのをどのように待つのですか?

編集:私は元々Promise.all()ポリフィルを求めました。しかし、私は約束のすべての機能を必要とせず、簡単な解決策を探しているように感じます。

基本的にネイティブJSではPromise.all(iterable);の機能が必要です。

+0

https://github.com/stefanpenner/es6-promise – Rayon

+0

サポートのような完全な約束か、一連の非同期タスクが完了するのを待つだけの能力が必要ですか? – ste2425

+0

コールバックが問題ありません。そう、はい、一連の非同期タスクを待つ機能です。 – etoxin

答えて

3

これは、このコードはthisライブラリの一部であるPromise.all

Promise.all = function (arr) { 
    var args = Array.prototype.slice.call(arr); 

    return new Promise(function (resolve, reject) { 
     if (args.length === 0) return resolve([]); 
     var remaining = args.length; 

     function res(i, val) { 
     try { 
      if (val && (typeof val === 'object' || typeof val === 'function')) { 
      var then = val.then; 
      if (typeof then === 'function') { 
       then.call(val, function (val) { 
       res(i, val); 
       }, reject); 
       return; 
      } 
      } 
      args[i] = val; 
      if (--remaining === 0) { 
      resolve(args); 
      } 
     } catch (ex) { 
      reject(ex); 
     } 
     } 

     for (var i = 0; i < args.length; i++) { 
     res(i, args[i]); 
     } 
    }); 
    }; 

ためポリフィルです。

+0

私は約束のすべての機能を必要としないように感じます。あなたの答えをありがとうが、私はより単純なソリューションを探しています。私はこれを反映するために質問を更新しました。 – etoxin

+0

私はこれを 'Promise'の' all'関数をポリ充てんするためのアイデアを得るために投稿しました –

関連する問題