新しい Promise() コンストラクター内で async/await を使用するのはアンチパターンですか?
非同期プログラミングは難しい場合があります。特にネストされたコールバックを扱う場合。これを簡素化するために、ES6 では async/await 構文が導入されました。ただし、新しい Promise() のコンストラクター関数内で async/await を使用する場合は注意が必要です。
提供された例では:
return new Promise(async (resolve, reject) => { eachLimit((await getAsyncArray), 500, (item, callback) => { // do other things that use native promises. }, (error) => { if (error) return reject(error); // resolve here passing the next value. }); });
getAsyncArray を呼び出すために await を使用しています。これは Promise を返しますが、Promise コンストラクターのエグゼキューター関数内にあります。これは、「Promise コンストラクターのアンチパターン」として知られています。
このパターンの主な危険は、エラーが適切に処理されない可能性があることです。非同期性は予測できない動作を引き起こす可能性があり、async/await を利用すると潜在的な問題を発見することが難しくなります。
たとえば、getAsyncArray 関数のタイプミスは TypeError につながりますが、eachLimit コールバックでは捕捉されない可能性があります。エラー処理。ただし、async/await が削除された場合、エラーは Promise コンストラクターの外でスローされ、適切に処理されます。
結論として、Promise() のコンストラクター関数内で async/await を使用すると便利に見えるかもしれませんが、これは、エラー処理の問題が発生する可能性があるため、アンチパターンです。代わりに、適切なエラー伝播とコードの保守性を確保するために、Promise コンストラクターの外側で async/await を使用することを検討してください。
以上が「Promise」コンストラクター内で「async/await」を使用するのはアンチパターンですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。