ホームページ >ウェブフロントエンド >jsチュートリアル >Promise Chaining は、非同期操作でネストされた 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 サイトの他の関連記事を参照してください。