解开嵌套 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中文网其他相关文章!