ホームページ  >  記事  >  ウェブフロントエンド  >  nodejsの複数のリクエストは順序を維持します

nodejsの複数のリクエストは順序を維持します

王林
王林オリジナル
2023-05-23 21:46:39817ブラウズ

Node.js は、高性能でスケーラブルなネットワーク アプリケーションの開発に一般的に使用されるイベント駆動型 JavaScript ランタイム環境です。多くのシナリオでは、複数のリクエストを異なる API またはデータ ソースに送信する必要があり、これらのリクエストの順序を保証する必要があります。この記事では、複数のリクエストの順序を維持する 3 つの方法を紹介します。

1. コールバック関数を使用する

Node.js では、コールバック関数が非同期プログラミングの中核です。複数のリクエストでは、あるリクエストのコールバック関数を別のリクエストのコールバック関数として使用して、それらの順序を確保できます。

たとえば、ユーザー情報の取得、ユーザーの注文の取得、ユーザーのアドレスの取得という 3 つの HTTP リクエストを送信するとします。後続のリクエストは前のリクエストのデータに依存する必要があるため、これら 3 つのリクエストは順番に実行する必要があります。

getUserInfo(userId, function(err, userInfo) {
  if (err) throw err;

  getUserOrder(userId, function(err, userOrder) {
    if (err) throw err;

    getUserAddress(userId, function(err, userAddress) {
      if (err) throw err;

      // 处理获取到的用户信息、订单和地址
      console.log(userInfo, userOrder, userAddress);
    });
  });
});

上記のコードでは、getUserInfo、getUserOrder、getUserAddress はすべて非同期 HTTP リクエストであり、そのコールバック関数は別のリクエストのコールバック関数として機能します。このようにして、リクエストの順序を保証し、各リクエストが完了した後に対応するデータを処理できます。

2. async/await を使用する

ES2017 標準では、JavaScript に Promise に基づく非同期プログラミング手法である async/await 構文が導入されました。 async/await を使用すると、非同期コードを同期コードのように見せることができ、複数の非同期リクエストの順序を管理しやすくなります。

async function getUserInfo(userId) {
  const response = await fetch(`/api/user/${userId}/info`);
  const userInfo = await response.json();
  return userInfo;
}

async function getUserOrder(userId) {
  const response = await fetch(`/api/user/${userId}/order`);
  const userOrder = await response.json();
  return userOrder;
}

async function getUserAddress(userId) {
  const response = await fetch(`/api/user/${userId}/address`);
  const userAddress = await response.json();
  return userAddress;
}

async function getUserData(userId) {
  const userInfo = await getUserInfo(userId);
  const userOrder = await getUserOrder(userId);
  const userAddress = await getUserAddress(userId);
  return { userInfo, userOrder, userAddress };
}

getUserData(userId)
  .then(data => {
    // 处理获取到的用户信息、订单和地址
    console.log(data.userInfo, data.userOrder, data.userAddress);
  })
  .catch(error => {
    console.error(error);
  });

上記のコードでは、getUserInfo、getUserOrder、getUserAddress はすべて Promise を返す非同期リクエストです。 async/await を使用すると、コードを順番に記述するだけで順序を保証できます。 getUserData 関数は 3 つの非同期リクエストを含む高レベル関数で、ユーザー データを取得し、ユーザー情報、順序、アドレスを含むオブジェクトを返します。 Promise オブジェクトの then メソッドは返されたデータの処理に使用され、catch メソッドはエラーの処理に使用されます。

3. Promise.all と配列分割構文を使用する

Promise.all メソッドは、Promise API によって提供される方法であり、複数の非同期リクエストを並行して実行し、それらのリクエストが完了したときに使用できます。結果を返します。 async/await と組み合わせて使用​​すると、配列分割構文を使用して返された結果を配列に分解できるため、複数のリクエストの結果を処理しやすくなります。

const userInfoPromise = fetch(`/api/user/${userId}/info`).then(response => response.json());
const userOrderPromise = fetch(`/api/user/${userId}/order`).then(response => response.json());
const userAddressPromise = fetch(`/api/user/${userId}/address`).then(response => response.json());

Promise.all([userInfoPromise, userOrderPromise, userAddressPromise])
  .then(([userInfo, userOrder, userAddress]) => {
    // 处理获取到的用户信息、订单和地址
    console.log(userInfo, userOrder, userAddress);
  })
  .catch(error => {
    console.error(error);
  });

上記のコードでは、fetch 関数を使用してユーザー情報、注文、およびアドレスを取得し、それらをそれぞれ Promise オブジェクトにカプセル化します。次に、Promise.all メソッドを使用してこれら 3 つの Promise を並列実行し、その結果を配列に分解します。上記のメソッドと同様に、Promise オブジェクトの then メソッドは返されたデータの処理に使用され、catch メソッドはエラーの処理に使用されます。

コールバック関数、async/await、Promise.all を使用すると、複数の非同期リクエストの順序を簡単に管理し、その結果を処理できます。さまざまなシナリオやニーズに応じて、Node.js コードを記述する最適な方法を選択できます。

以上がnodejsの複数のリクエストは順序を維持しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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