使用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。累積結果
或者,您可以將所有結果累積到單一物件中。建立一個物件來儲存結果並將其作為參數傳遞給後續請求:
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 Promises 連結和共享多個 HTTP 請求的結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!