入れ子構造を削除するための 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 サイトの他の関連記事を参照してください。