Promise.all() の利用

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-21 00:30:11894ブラウズ

Memanfaatkan Promise.all()

await を 1 回使用して、複数の非同期プロセスを待機します。

JavaScript の強みの 1 つは、プロセスが互いに待機することを避けるために非同期操作を実行できることです。実際のアプリケーションでは、非同期操作は、待ち時間がネットワーク接続やストレージ速度などの外部要因に依存するプロセスによく使用されます。非同期操作の例をいくつか示します:

  • データベースクエリ
  • 他の Web サイトからデータを取得する (HTTP リクエスト)
  • ファイルの読み取りと書き込み
  • メールを送信

非同期関数の実行

JavaScript では、非同期操作は通常、関数を使用して実装されます。関数とは、合計を計算する加算関数やコンピューターをシャットダウンするシャットダウン関数 (そのような関数があるかも知れません) など、特定のタスクを実行するコード ブロックのセットです。

関数を定義

非同期関数を定義するには、関数の宣言時に async キーワードを追加するだけで、後は通常の関数と同じです。

たとえば、メールを非同期に送信する関数を定義します。

<code class="language-javascript">async function kirimEmail(tujuan, judul, isi) {
  // 发送邮件
  // ...
}</code>

またはアロー関数を使用します:

<code class="language-javascript">const kirimEmail = async (tujuan, judul, isi) => {
  // 发送邮件
  // ...
}</code>

関数の呼び出し

上記の関数が呼び出されると、自動的に非同期で実行されます。つまり、相互に待機することはありません。

例:

<code class="language-javascript">kirimEmail('contoh1@email.com', 'Tes 1 Email', 'Halo. Ini saya lagi ngetes.');
kirimEmail('contoh2@email.com', 'Tes 2 Email', 'Halo. Ini saya lagi ngetes.');
kirimEmail('contoh3@email.com', 'Tes 3 Email', 'Halo. Ini saya lagi ngetes.');</code>

上記の例では、電子メールを送信するすべてのプロセスが順番に実行されますが、完了を待つプロセスはありません。したがって、前のプロセスが完了していない間に次のプロセスが開始され、相互にブロックされません。

データを取得する必要がある場合、または非同期プロセスが完了するのを待つ必要がある場合は、関数を呼び出すときに await キーワードを使用できます。

例:

<code class="language-javascript">await kirimEmail('contoh1@email.com', 'Tes 1 Email', 'Halo. Ini saya lagi ngetes.');
await kirimEmail('contoh2@email.com', 'Tes 2 Email', 'Halo. Ini saya lagi ngetes.');
await kirimEmail('contoh3@email.com', 'Tes 3 Email', 'Halo. Ini saya lagi ngetes.');</code>

この例では、各プロセスは前のプロセスが完了するまで待機します。これは通常、あるプロセスから次のプロセスのためにデータをフェッチする必要がある場合に発生するため、必要なデータをフェッチする前に前のプロセスが完了するまで待つ必要があります。

Promise.all()

Promise.all を使用すると、複数の非同期関数を同時に呼び出して待機できます。

関数の呼び出し

Promise.all を使用して複数の非同期関数を呼び出す例は次のとおりです。

<code class="language-javascript">await Promise.all([
  kirimEmail('contoh1@email.com', 'Tes 1 Email', 'Halo. Ini saya lagi ngetes.'),
  kirimEmail('contoh2@email.com', 'Tes 2 Email', 'Halo. Ini saya lagi ngetes.'),
  kirimEmail('contoh3@email.com', 'Tes 3 Email', 'Halo. Ini saya lagi ngetes.'),
]);</code>

上記の例では、3回のメール送信処理の完了を待ち、成功・失敗に関わらず結果が配列で返されます。

特徴

Promise.all には次のプロパティがあります:

  • 実行される非同期関数は配列に配置されます。
  • すべての関数は、起動から完了まで全体として実行されます。
  • これらは全体として機能するため、特に
  • が使用されている場合は、すべてのプロセスが完了するまで待機します。 awaitいずれかのプロセスでエラーが発生した場合、すべてのプロセスがエラーを報告します。
  • 詳細については、MDN の
ドキュメントを参照してください。

結論

Promise.all を使用すると非常に便利です。await ? を 1 回記述するだけで済みます。また、プロセスの 1 つがエラーになった場合にすべてのプロセスを停止したい場合にも便利です。ただし、1 つのプロセスが失敗しても他のプロセスの実行を継続したい場合は、次の記事で説明します。

読んでいただきありがとうございます。議論したい場合は、メッセージを残してください。友達を作りたい場合は、私に知らせてください?

以上がPromise.all() の利用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。