首頁 >web前端 >js教程 >如何解除 Promise 以獲得更簡潔的非同步 JavaScript 程式碼?

如何解除 Promise 以獲得更簡潔的非同步 JavaScript 程式碼?

Barbara Streisand
Barbara Streisand原創
2024-12-09 22:40:10734瀏覽

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