連結Promise 以刪除巢狀結構
使用非同步操作時,Promise 提供了一種便利的方法來處理回呼並保持程式碼可讀性。然而,嵌套的 Promise 很快就會使程式碼變得複雜且難以理解。本文討論如何刪除嵌套的 Promise 並將它們連結起來以提高清晰度。
方法
要刪除巢狀的 Promise,我們從每個 then 回呼回傳一個新的 Promise。這使我們能夠將 Promise 一個接一個地連結起來,從而消除了對嵌套結構的需求。以下是所提供程式碼的修改版本:
exports.viewFile = function(req, res) { var fileId = req.params.id; 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); }); };
在此程式碼中,每個 then 回呼都會傳回後續要求的 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
傳回新的Promise 時,該Promise 的結果值將會傳遞給鏈中的下一個處理程序。或者,如果處理程序傳回的 Promise 是鏈中的最後一個,則該 Promise 的解析值將傳遞給使用者。
以上是如何解除 Promise 以獲得更簡潔的非同步 JavaScript 程式碼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!