首页 >web前端 >js教程 >如何解除 Promise 以获得更简洁的异步 JavaScript 代码?

如何解除 Promise 以获得更简洁的异步 JavaScript 代码?

Barbara Streisand
Barbara Streisand原创
2024-12-09 22:40:10730浏览

How Can I Unnest Promises for Cleaner Asynchronous JavaScript Code?

链接 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn