ホームページ > ウェブフロントエンド > jsチュートリアル > 「async/await」を使用して JavaScript で非同期呼び出しを並列化するにはどうすればよいですか?

「async/await」を使用して JavaScript で非同期呼び出しを並列化するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-27 17:28:14
オリジナル
302 人が閲覧しました

How Can I Parallelize Asynchronous Calls in JavaScript using `async/await`?

await を使用した非同期呼び出しの並列化

ES7 で導入された async/await 構文を使用する場合、複数の await ステートメントが実行されることを理解することが重要です並行ではなく順次に。これは、1 つの関数呼び出しで結果を待機すると、前の呼び出しが完了するまで実行が一時停止されることを意味します。これを回避するには、いくつかのオプションがあります。

Node.js で最も簡単な方法の 1 つは、Promise.all() 関数を利用することです。 Promise.all() を使用すると、指定されたすべての Promise が解決された場合に解決される、またはいずれかの Promise が拒否された場合に拒否される単一の Promise を作成できます。 Promise.all() に Promise の配列を渡すことで、すべての Promise が確実に同時に実行されるようにすることができます。

例を次に示します。

const someCall = () => new Promise((resolve) => setTimeout(() => resolve("some value"), 100));
const anotherCall = () => new Promise((resolve) => setTimeout(() => resolve("another value"), 200));

await Promise.all([someCall(), anotherCall()])
  .then((results) => {
    const [someResult, anotherResult] = results;
    // Do something with the results.
  });
ログイン後にコピー

この例では、両方の someCall() anotherCall() は並行して実行され、結果は結果配列で利用可能になります。

別のアプローチは、非同期ライブラリを使用することです。これにより、非同期操作のための追加機能が提供されます。 async.Parallel() 関数を使用すると、並列実行する関数の配列と、すべての関数が完了した後に呼び出されるコールバックを指定できます。

async.Parallel() の使用例を次に示します。

const async = require("async");

const someCall = (callback) => setTimeout(() => callback(null, "some value"), 100);
const anotherCall = (callback) => setTimeout(() => callback(null, "another value"), 200);

async.parallel([someCall, anotherCall], (err, results) => {
  if (err) {
    // Handle any errors.
  } else {
    const [someResult, anotherResult] = results;
    // Do something with the results.
  }
});
ログイン後にコピー

Promise.all() と async.Parallel() は両方とも、非同期関数を並列実行するための信頼できるメソッドを提供します。プロジェクトの要件や好みに最も合ったアプローチを選択してください。

以上が「async/await」を使用して JavaScript で非同期呼び出しを並列化するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート