[解決済み】Promise.all: 解決された値の順序
2022-04-21 15:59:59
質問
見る
MDN
のように見えます。
values
に渡される
then()
のコールバックには、Promise.allの順序で値が含まれています。例えば
var somePromises = [1, 2, 3, 4, 5].map(Promise.resolve);
return Promise.all(somePromises).then(function(results) {
console.log(results) // is [1, 2, 3, 4, 5] the guaranteed result?
});
どなたか、どのような順序で記述された仕様書を引用していただけませんか?
values
を入れるべきでしょうか?
PS: このようなコードを実行すると、これが真実であるように思えるのですが、もちろんそれは証拠ではなく、偶然かもしれません。
解決するには?
手短に言うと 順番は守られる .
リンク先の仕様に従うと
Promise.all(iterable)
を取る。
iterable
をパラメータとして、内部的に
PerformPromiseAll(iterator, constructor, resultCapability)
をループさせ、後者は
iterable
を使って
IteratorStep(iterator)
.
解決は
Promise.all() Resolve
ここで、解決された各プロミスは、内部的に
[[Index]]
スロットがあり、これは元の入力におけるプロミスのインデックスをマークします。
Promise.all()に渡すイテラブルが厳密な順序(例えば配列)であれば、出力は厳密な順序になることを意味します。
以下のフィドル(ES6)で、この動作を確認できます。
// Used to display results
const write = msg => {
document.body.appendChild(document.createElement('div')).innerHTML = msg;
};
// Different speed async operations
const slow = new Promise(resolve => {
setTimeout(resolve, 200, 'slow');
});
const instant = 'instant';
const quick = new Promise(resolve => {
setTimeout(resolve, 50, 'quick');
});
// The order is preserved regardless of what resolved first
Promise.all([slow, instant, quick]).then(responses => {
responses.map(response => write(response));
});
関連
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み】Javascriptのコールバック関数がFirefoxで「Callback is not a function」というエラーを投げる
-
[解決済み】未定義のプロパティ 'bind' を読み込めない。React.js【重複あり
-
[解決済み】Javascript - ERR_CONTENT_LENGTH_MISMATCH
-
[解決済み】エラー:リクエストのエンティティが大きすぎる
-
[解決済み] JavaScriptでクエリ文字列の値を取得するにはどうすればよいですか?
-
[解決済み] JavaScriptの配列で一意な値をすべて取得する(重複を排除する)。
-
[解決済み] Promise.allのエラー処理
-
[解決済み】「GET」パラメータから値を取得する(JavaScript)【重複】。
-
[解決済み】オブジェクトの配列をプロパティ値でソートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Facebook Graph API のクエリで with=location を使用すると "Uncaught (in promise) undefined" というエラーが発生する。
-
[解決済み】document.getElementByIDは関数ではありません。
-
[解決済み] jQueryで、ユーザーがそのフィールドを編集している間、テキストフィールドの最初の文字を大文字にするにはどうすればよいですか?
-
[解決済み】Angular JS Uncaught Error。[インジェクター:モジュラー]。
-
[解決済み】NodeJS "ESモジュールをロードするためにインポートを使用する必要があります。"
-
[解決済み】エラー:リクエストのエンティティが大きすぎる
-
[解決済み】npm install --legacy-peer-deps は具体的に何をするのですか?どんなときに推奨されるのか/どんな使用例が考えられるのか?
-
[解決済み】XMLパースエラー:ルート要素が見つからない コンソールの場所 FF
-
[解決済み】JavaScriptで相対URLへのリダイレクトを行う
-
[解決済み] .then()チェーンで以前のプロミス結果にアクセスするにはどうすればよいですか?