Promise チェーンでの中間結果の管理
問題:
Promise チェーンを作成するときに、最終コールバック内で中間の Promise 結果にアクセスするのは難しい場合があります。次の例では、promiseB のコールバック内で、promiseA の結果にどのようにアクセスできますか?
function getExample() { return promiseA(…).then(function(resultA) { // Processing return promiseB(…); }).then(function(resultB) { // How can we access resultA here? }); }
解決策: チェーンの切断
中間結果にアクセスするにはPromise チェーンでは、チェーンを個別のコンポーネントに分割するのが最善です。これにより、同じ Promise に複数のコールバックをアタッチし、必要に応じて解決された値にアクセスできるようになります。コードの改良版は次のとおりです。
function getExample() { var a = promiseA(…); var b = a.then(function(resultA) { // Processing return promiseB(…); }); return Promise.all([a, b]).then(function([resultA, resultB]) { // Processing using both resultA and resultB return …; }); }
このアプローチでは、Promise.all() メソッドを利用して、チェーン内のすべての Promise の配列を作成します。次に、別の then() コールバックを Promise.all() の結果に連鎖させ、解決された値の配列を受け取る関数を渡します。これにより、最終コールバック内で resultA と resultB の両方に簡単にアクセスできるようになります。
代替ソリューション:
ES5 では、.spread() メソッドを使用して達成できます。同様の機能:
… return Promise.all([a, b]).then(.spread(function(resultA, resultB) { … });
Bluebird は、このプロセスを簡素化する専用の join() メソッドを提供します。さらに:
… return Promise.join(a, b, function(resultA, resultB) { … });
チェーンを切断し、適切な Promise コンビネータを使用することで、中間の Promise 結果にエレガントにアクセスして操作でき、明確で効率的なコード構造を確保できます。
以上がJavaScript Promise チェーンの中間 Promise 結果にアクセスするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。