解開巢狀 Promise
NodeJS Promise 提供了處理非同步操作的強大機制。然而,嵌套的 Promise 會帶來程式碼複雜性。這個問題深入探討如何將嵌套的 Promise 轉換為更易於管理的鍊式序列。
原始程式碼結構
原始程式碼遵循巢狀方法,其中解析每個Promise 都會觸發後續的Promise 呼叫:
boxContentRequest('files/' + fileId + '/content', req.user.box.accessToken) .then(function(response) { boxViewerRequest('documents', {url: response.request.href}, 'POST') .then(function(response) { boxViewerRequest('sessions', {document_id: response.body.id}, 'POST') .then(function(response) { console.log(response); }); }); });
連結Promises
為了鍊式Promise,需要從每個 Promise 的 then 回呼中返回新的 Promise。這種方法允許鍊式 Promise 依序解析。
boxContentRequest('files/' + fileId + '/content', req.user.box.accessToken) .then(function(response) { return boxViewerRequest('documents', {url: response.request.href}, 'POST'); }) .then(function(response) { return boxViewerRequest('sessions', {document_id: response.body.id}, 'POST'); }) .then(function(response) { console.log(response); });
修改後的程式碼結構確保 Promise 鏈無縫繼續,每一步將其結果傳遞給序列中的下一個 Promise。
一般模式
這種連結模式可以歸納如下:
somePromise.then(function(r1) { return nextPromise.then(function(r2) { return anyValue; }); }) // resolves with anyValue || \||/ \/ somePromise.then(function(r1) { return nextPromise; }).then(function(r2) { return anyValue; }) // resolves with anyValue as well
以上是如何將巢狀的 Node.js Promise 轉換為鍊式序列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!