ホームページ > ウェブフロントエンド > jsチュートリアル > ネストされた Node.js Promise を連鎖シーケンスに変換するにはどうすればよいですか?

ネストされた Node.js Promise を連鎖シーケンスに変換するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-14 11:57:11
オリジナル
549 人が閲覧しました

How Can Nested Node.js Promises Be Transformed into a Chained Sequence?

ネストされた Promise の解明

NodeJS Promise は、非同期操作を処理するための強力なメカニズムを提供します。ただし、Promise をネストすると、コードが複雑になる可能性があります。この質問では、ネストされた Promise を、より管理しやすい連鎖シーケンスに変換する方法を詳しく掘り下げます。

元のコード構造

元のコードは、ネストされたアプローチに従っており、各 Promise は後続の Promise 呼び出しをトリガーします:

boxContentRequest('files/' + fileId + '/content', req.user.box.accessToken)
    .then(function(response) {
        boxViewerRequest('documents', {url: response.request.href}, 'POST')
            .then(function(response) {
                boxViewerRequest('sessions', {document_id: response.body.id}, 'POST')
                    .then(function(response) {
                        console.log(response);
                    });
            });
    });
ログイン後にコピー

Chaining Promise

Promise を連鎖させるには、各 Promise の then コールバックから新しい Promise を返す必要があります。このアプローチにより、チェーンされた Promise を順番に解決できます。

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);
    });
ログイン後にコピー

変更されたコード構造により、Promise チェーンがシームレスに継続し、各ステップでその結果がシーケンス内の次の 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
ログイン後にコピー

以上がネストされた Node.js Promise を連鎖シーケンスに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート