Get to know MDN better
このページはコミュニティーの尽力で英語から翻訳されました。MDN Web Docs コミュニティーについてもっと知り、仲間になるにはこちらから。
January 2024以降、この機能は最新のバージョンの端末およびブラウザーで動作します。古い端末やブラウザーでは動作しないことがあります。
Array.fromAsync() は静的メソッドで、非同期反復可能オブジェクト、反復可能オブジェクト、配列風のオブジェクトから、シャローコピーされた新しい配列インスタンスを作成します。
配列に変換する非同期反復可能、反復可能、配列風オブジェクトです。
mapFn 省略可配列の各要素に対して呼び出す関数です。指定された場合は、配列に追加するすべての値が最初にこの関数に渡され、 mapFn の返値が(待機後に)配列に追加されます。この関数は以下の引数で呼び出されます。
elementitems が同期イテレーターまたは配列風オブジェクトの場合、すべての要素が最初に待機状態となり、element は thenable になることはありません。 items が非同期反復可能オブジェクトの場合、それぞれの値はそのまま渡されます。
index配列の、現在処理中の要素のインデックスです。
thisArg 省略可mapFn 実行時に this として使用する値です。
新しい Promise で、その履行値は新しい Array インスタンスです。
Array.fromAsync() により、以下のものから配列を作成することができます。
Array.fromAsync() は for await...of にとてもよく似た方法で非同期反復可能オブジェクトを反復処理します。 Array.fromAsync(items) は、以下をの点除いて Array.from() とほぼ同じ動きをします。
Array.fromAsync() は、次の点を除いて、動作は Array.from() とほぼ同じです。
Array.fromAsync() と Promise.all() はどちらも、反復可能なプロミスを配列のプロミスに変換することができます。しかし、 2 つの重要な違いがあります。
items が非同期の反復可能オブジェクトであり、それぞれの結果の value もプロミスである場合、それらのプロミスは待機されることなく、結果の配列に追加されます。これは for await...of の動作と一致しています。
メモ: 実際には、プロミスを生成する非同期反復可能オブジェクトに遭遇することはほとんどありません。なぜなら、非同期ジェネレータ関数を使用して実装すると、 yield 式によってプロミスが自動的にラップ解除されるからです。
items が同期反復可能オブジェクトまたは配列風である場合、mapFn の入力と出力は、内部で Array.fromAsync() によって待機されます。
items が非同期反復可能オブジェクトの場合、mapFn への入力は待機されませんが、出力は待機されます。上記と同じ createAsyncIter 関数を使用します。
興味深いことに、これは Array.fromAsync(createAsyncIter()) は Array.fromAsync(createAsyncIter(), (element) => element) と同等ではないことを意味しています。後者はそれぞれの生成値を待機しますが、前者は待機しないからです。
Array.fromAsync() はオブジェクトから得られる値を順番に待ちます。 Promise.all() はすべての値を同時に待ちます。
for await...of と同様に、反復処理されるオブジェクトが同期反復可能オブジェクトで、反復処理中にエラーが発生した場合、基盤となるイテレーターの return() メソッドは呼び出されず、イテレーターは閉じられません。
イテレーターを閉じる必要がある場合は、代わりに for...of ループを使用して、各値を await する必要があります。
| ECMAScript® 2027 Language Specification # sec-array.fromasync |
ブラウザー互換性一覧表を表示するには、JavaScript を有効にしてください。
より良いインターネットのための青写真。
このコンテンツの一部は、©1998–2026 個人の mozilla.org 協力者です。コンテンツはクリエイティブ・コモンズ・ライセンスのもとで利用できます。