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 サイトの他の関連記事を参照してください。