関数内でAPIに複数回要求を実行する必要があります。私はすべての回答を一度得たら、すべての回答を一括して処理する必要があります。これを行うには最高のJSデザインは何ですか?jsで一連の非同期タスクが完了するのをどのように待つのですか?
編集:私は元々Promise.all()
ポリフィルを求めました。しかし、私は約束のすべての機能を必要とせず、簡単な解決策を探しているように感じます。
基本的にネイティブJSではPromise.all(iterable);
の機能が必要です。
関数内でAPIに複数回要求を実行する必要があります。私はすべての回答を一度得たら、すべての回答を一括して処理する必要があります。これを行うには最高のJSデザインは何ですか?jsで一連の非同期タスクが完了するのをどのように待つのですか?
編集:私は元々Promise.all()
ポリフィルを求めました。しかし、私は約束のすべての機能を必要とせず、簡単な解決策を探しているように感じます。
基本的にネイティブJSではPromise.all(iterable);
の機能が必要です。
これは、このコードは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]);
}
});
};
ためポリフィルです。
私は約束のすべての機能を必要としないように感じます。あなたの答えをありがとうが、私はより単純なソリューションを探しています。私はこれを反映するために質問を更新しました。 – etoxin
私はこれを 'Promise'の' all'関数をポリ充てんするためのアイデアを得るために投稿しました –
https://github.com/stefanpenner/es6-promise – Rayon
サポートのような完全な約束か、一連の非同期タスクが完了するのを待つだけの能力が必要ですか? – ste2425
コールバックが問題ありません。そう、はい、一連の非同期タスクを待つ機能です。 – etoxin