JavaScript入門 練習問題 31:非同期処理:複数のPromiseをまとめて扱う機能
次のコードの実行結果として正しいものはどれですか?
```javascript
const p1 = Promise.resolve(1);
const p2 = Promise.resolve(2);
const p3 = Promise.resolve(3);
Promise.all([p1, p2, p3]).then(results => {
console.log(results);
});
```
- [1, 2, 3]という配列が出力される
- 1という数値のみが出力される
- Promiseオブジェクトの配列が出力される
- undefinedという値が出力される
- 3という数値のみが出力される
Qraftユーザーの成績:難易度 Dランク(レーティング1107)・正答率 73%(11/15回正解)
レーティングは解いた人の実力と正誤から算出する難しさ(初期値1200)。ランクはその全問題中の順位(S+が最難関、F-が最易)
正解と解説を見る
Promise.allは複数のPromiseをまとめて扱い、すべてが解決(=処理が正常に完了すること)した時点で、それぞれの結果を順序通りに配列として返します。
【正解の理由】
p1、p2、p3はすべて即座に解決されるPromiseであり、Promise.allはこれらの解決値を元の順序のまま配列にまとめてthenに渡すため、[1, 2, 3]が出力されます。
【不正解の理由】
• 「1という数値のみが出力される」:Promise.allは配列内のすべてのPromiseの結果をまとめて返すため、最初の値だけが渡されることはない
• 「Promiseオブジェクトの配列が出力される」:Promise.allはPromiseそのものではなく、各Promiseが解決した後の実際の値をまとめて返す
• 「undefinedという値が出力される」:各Promiseにはresolve(1)などで明確な値が設定されているため、undefinedにはならない
• 「3という数値のみが出力される」:Promise.allは最後の値だけを返すのではなく、すべての結果を配列としてまとめて返す