ホームページ > ウェブフロントエンド > jsチュートリアル > Bluebird Promise を使用して複数の HTTP リクエストからの結果をチェーンして共有するにはどうすればよいですか?

Bluebird Promise を使用して複数の HTTP リクエストからの結果をチェーンして共有するにはどうすればよいですか?

DDD
リリース: 2024-12-06 13:13:12
オリジナル
289 人が閲覧しました

How Can I Chain and Share Results from Multiple HTTP Requests Using Bluebird Promises?

Promise による前の結果の連鎖と共有

コードでは、Bluebird Promise ライブラリを使用して複数の HTTP リクエストを作成しようとしています。あるリクエストから次のリクエストに応答データを渡す必要があります。これを達成するには、いくつかの戦略を利用して、以前の結果を Promise と連鎖させて共有します。

1. Promise の連鎖

.then() ハンドラー内から Promise を返すことで、Promise を連鎖させることができます。後続の各 .then() は、前の Promise の結果を受け取ります。あなたの場合、次のようにリクエストをチェーンできます:

callhttp("172.16.28.200", payload).then(function(first) {
  return callhttp("172.16.28.200", first);
}).then(function(second) {
  return callhttp("172.16.28.200", second);
});
ログイン後にコピー

2.結果の蓄積

または、すべての結果を 1 つのオブジェクトに蓄積することもできます。結果を保存するオブジェクトを作成し、それを引数として後続のリクエストに渡します:

var results = {};
callhttp("172.16.28.200", payload).then(function(first) {
  results.first = first;
  return callhttp("172.16.28.200", first);
}).then(function(second) {
  results.second = second;
  return callhttp("172.16.28.200", second);
}).then(function(third) {
  results.third = third;
});
ログイン後にコピー

3.ネストされた Promise

以前のすべての結果にアクセスする必要がある場合は、Promise をネストできます。ネストされた各 Promise は、外側の Promise の結果にアクセスできます:

callhttp("172.16.28.200", payload).then(function(first) {
  return callhttp("172.16.28.200", first).then(function(second) {
    return callhttp("172.16.28.200", second).then(function(third) {
      // Access all three results here
    });
  });
});
ログイン後にコピー

4.チェーンの切断

一部のリクエストが独立して続行できる場合は、チェーンを切断し、Promise.all() を使用して、すべてが完了したときに結果を収集できます。

var p1 = callhttp("172.16.28.200", payload);
var p2 = callhttp("172.16.28.200", payload);
var p3 = callhttp("172.16.28.200", payload);

Promise.all([p1, p2, p3]).then(function(results) {
  // All three results are available in the `results` array
});
ログイン後にコピー

5. async/await の使用 (ES7 機能)

ES7 では、async/await を使用して非同期操作のシーケンスを簡素化できます。これにより、通常の同期構文を使用できるようになり、中間結果が同じスコープで利用可能になります:

async function myFunction() {
  const first = await callhttp("172.16.28.200", payload);
  const second = await callhttp("172.16.28.200", first);
  const third = await callhttp("172.16.28.200", second);

  // Access all three results here
}

myFunction().then(result => {}).catch(error => {});
ログイン後にコピー

以上がBluebird Promise を使用して複数の HTTP リクエストからの結果をチェーンして共有するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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