管理Promise 鏈中的中間結果
問題:
問題:function getExample() { return promiseA(…).then(function(resultA) { // Processing return promiseB(…); }).then(function(resultB) { // How can we access resultA here? }); }
問題:
它在最終回調中訪問中間承諾結果可能具有挑戰性。在下面的範例中,我們如何在promiseB的回調中存取promiseA的結果?function getExample() { var a = promiseA(…); var b = a.then(function(resultA) { // Processing return promiseB(…); }); return Promise.all([a, b]).then(function([resultA, resultB]) { // Processing using both resultA and resultB return …; }); }
解決方案:打破鏈條
訪問中間結果對於承諾鏈,最好將其分解為單獨的組件。這允許您將多個回調附加到同一個承諾,在需要時存取解析的值。這是程式碼的改進版本:… return Promise.all([a, b]).then(.spread(function(resultA, resultB) { … });此方法利用 Promise.all() 方法建立鏈中所有 Promise 的陣列。然後,我們將另一個 then() 回呼連結到 Promise.all() 結果,傳遞一個接收解析值陣列的函數。這使得我們可以在最終回調中輕鬆存取 resultA 和 resultB。
… return Promise.join(a, b, function(resultA, resultB) { … });替代解決方案:在ES5 中,可以使用.spread() 方法來實現類似的功能:Bluebird 提供了專用的join()方法來簡化此過程進一步:透過打破鏈條並使用適當的 Promise 組合器,您可以優雅地存取和操作中間 Promise 結果,確保清晰高效的程式碼結構。
以上是如何存取 JavaScript Promise 鏈中的中間 Promise 結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!