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

Promise コンストラクター内での「async/await」のネストがアンチパターンなのはなぜですか?

Mary-Kate Olsen
リリース: 2024-12-16 13:49:12
オリジナル
642 人が閲覧しました

Why is Nesting `async/await` within Promise Constructors an Anti-Pattern?

Promise コンストラクター内で async/await を入れ子にするアンチパターン

この例では、async.eachLimit 関数を使用して管理します。同時操作の数が増えると、ジレンマが生じます。最初はコードを次のように構成しようとします。

function myFunction() {
  return new Promise(async (resolve, reject) => {
    eachLimit((await getAsyncArray), 500, (item, callback) => {
      // Operations using native promises
    }, (error) => {
      if (error) return reject(error);
      // Resolve with the next value
    });
  });
}
ログイン後にコピー

「myFunction」関数を非同期として宣言するのは論理的であるように思えるかもしれませんが、「eachLimit」関数の内部コールバックが残っているため、それは現実的ではありません。アクセスできない。ただし、このアプローチには、エラーが処理されないままになる可能性があるという重大な落とし穴があります。

このアプローチは、別の Promise のコンストラクター内で Promise を使用するというアンチパターンの教科書的な例です。この場合、処理できないエラーのリスクが特に深刻になります。これを回避するには、次のコード スニペットを検討してください。

let p = new Promise(resolve => {
  ""(); // TypeError
  resolve();
});

(async () => {
  await p;
})().catch(e => console.log("Caught: " + e)); // Catches the error.
ログイン後にコピー

このシナリオでは、最初の行で例外がスローされますが、エラーは非同期アロー関数の「catch」ブロックによって適切に処理されます。安定性を維持し、コードベースの予期しない動作を防ぐには、適切なエラー処理が重要です。

以上がPromise コンストラクター内での「async/await」のネストがアンチパターンなのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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