ネストされた 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 サイトの他の関連記事を参照してください。