ホームページ >ウェブフロントエンド >jsチュートリアル >よりクリーンな非同期 JavaScript コードのために Promise のネストを解除するにはどうすればよいですか?

よりクリーンな非同期 JavaScript コードのために Promise のネストを解除するにはどうすればよいですか?

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 を返し、実行が順番に継続されるようにします。

全般Pattern

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 の解決値がコンシューマーに渡されます。

以上がよりクリーンな非同期 JavaScript コードのために Promise のネストを解除するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。