ホームページ >ウェブフロントエンド >jsチュートリアル >Promise Chaining は、非同期操作でネストされた Promise をどのように簡素化できるでしょうか?

Promise Chaining は、非同期操作でネストされた Promise をどのように簡素化できるでしょうか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-10 15:10:14253ブラウズ

How Can Promise Chaining Simplify Nested Promises in Asynchronous Operations?

ネストされた Promise を解明する

はじめに

ネストされた Promise は、相互に構築される非同期操作を操作するときに発生する可能性があります。提供されたコードでは、viewFile 関数が boxContentRequest と boxViewerRequest を使用して複数のネットワーク リクエストを作成します。現在、これらのリクエストはネストされた Promise 内に構造化されているため、コードを理解するのが難しくなります。

Promise のチェーン

ネストされた Promise を排除するには、Promise チェーンを使用できます。この手法を使用すると、複数の非同期操作を順次接続することができ、1 つの Promise の出力が次の Promise の入力になります。

リファクタリングされたコード

リファクタリングされたコード以下は希望の結果を達成しますchaining:

exports.viewFile = function (req, res) {
  var fileId = req.params.id;
  boxContentRequest('files/' + fileId + '/content', req.user.box.accessToken)
    .then(function (response) {
      // Return the next promise directly
      return boxViewerRequest('documents', { url: response.request.href }, 'POST');
    })
    .then(function (response) {
      // Return the final promise directly
      return boxViewerRequest('sessions', { document_id: response.body.id }, 'POST');
    })
    .then(function (response) {
      console.log(response);
    });
};

説明

リファクタリングされたコードでは、各 then コールバックから直接次の Promise を返します。これにより、Promise をシームレスにチェーンすることができ、実行フローが目的のシーケンスに従うことが保証されます。

Generic Promise Chaining Pattern

Promise チェーンの一般的なパターンは次のとおりです。 :

// Option 1: Single-line syntax
somePromise
  .then((r1) => nextPromise)
  .then((r2) => anyValue);

// Option 2: Multi-line syntax
somePromise
  .then(function (r1) {
    return nextPromise;
  })
  .then(function (r2) {
    return anyValue;
  });

どちらのオプションも、anyValue の値を使用して最終的な Promise を解決します。このパターンは、非同期操作を接続するための簡潔かつ洗練された方法を提供し、コード構造を簡素化し、読みやすさを向上させます。

以上がPromise Chaining は、非同期操作でネストされた Promise をどのように簡素化できるでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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