如何在 Promise 鏈中排序和共享資料
Promise 為管理 JavaScript 中的非同步操作提供了一個強大的工具。作為其中的一部分,有必要對操作進行排序並在它們之間共享資料。讓我們解決具體問題:
使用Promises 連結HTTP 請求和資料共享
在此場景中,您使用Promises 執行一系列HTTP 請求,其中一個請求的回應應用作下一個請求的輸入。 callhttp 函數處理這些請求,但需要存取先前請求的資料以建構下一個請求。具體來說,您希望將從第一個請求獲取的 API 金鑰傳遞給後續請求。
資料共享和排序方法
有多種方法可以實現此目的:
1。鍊式 Promise:
使用 then 鍊式Promise,將中間資料作為參數傳遞:
callhttp(url1, payload) .then(firstResponse => { // Use the data from firstResponse in the next request return callhttp(url2, payload, firstResponse.apiKey); }) .then(secondResponse => { // Use the combined data from firstResponse and secondResponse in the next request return callhttp(url3, payload, firstResponse.apiKey, secondResponse.userId); });
2.更高範圍分配:
將中間結果分配給更高範圍內的變數:
var firstResponse; callhttp(url1, payload) .then(result => { firstResponse = result; return callhttp(url2, payload); }) .then(secondResponse => { // Use both firstResponse and secondResponse here });
3.累積結果:
將結果儲存在累積物件中:
var results = {}; callhttp(url1, payload) .then(result => { results.first = result; return callhttp(url2, payload); }) .then(result => { results.second = result; return callhttp(url3, payload); }) .then(() => { // Use the accumulated results in results object });
4.嵌套承諾:
Nest承諾保持對所有先前結果的訪問:
callhttp(url1, payload) .then(firstResponse => { // Use firstResponse here return callhttp(url2, payload) .then(secondResponse => { // Use both firstResponse and secondResponse here return callhttp(url3, payload); .then(thirdResponse => { // Use all three responses here }); }); });
5.使用Promise.all() 拆分:
如果某些請求可以獨立發出,請將鏈分成單獨的部分並使用Promise.all() 收集結果:
const first = callhttp(url1, payload); const second = callhttp(url2, payload); const third = callhttp(url3, payload); Promise.all([first, second, third]) .then(results => { // Use all three results here });
ES7 非同步/等待:
在ES7 中,async/await 語法簡化了Promise 結果的排序和處理過程,提供了更簡單、更易讀的程式碼:
async function httpRequests() { const firstResponse = await callhttp(url1, payload); const secondResponse = await callhttp(url2, payload, firstResponse.apiKey); const thirdResponse = await callhttp(url3, payload, firstResponse.apiKey, secondResponse.userId); // Use all three responses here } httpRequests();
以上是如何在 JavaScript 中的 Promise 之間高效排序和共享資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!