ホームページ > ウェブフロントエンド > jsチュートリアル > 「Promise」コンストラクター内で「async/await」を使用するのはアンチパターンですか?

「Promise」コンストラクター内で「async/await」を使用するのはアンチパターンですか?

DDD
リリース: 2024-12-18 22:00:16
オリジナル
517 人が閲覧しました

Is Using `async/await` Inside a `Promise` Constructor an Anti-Pattern?

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

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