Node.js は、高性能でスケーラブルなネットワーク アプリケーションの開発に一般的に使用されるイベント駆動型 JavaScript ランタイム環境です。多くのシナリオでは、複数のリクエストを異なる API またはデータ ソースに送信する必要があり、これらのリクエストの順序を保証する必要があります。この記事では、複数のリクエストの順序を維持する 3 つの方法を紹介します。
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 リクエストであり、そのコールバック関数は別のリクエストのコールバック関数として機能します。このようにして、リクエストの順序を保証し、各リクエストが完了した後に対応するデータを処理できます。
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 メソッドはエラーの処理に使用されます。
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 サイトの他の関連記事を参照してください。