Rumah >hujung hadapan web >tutorial js >Mengapakah Nesting `async/waiit` dalam Promise Constructors sebagai Anti-Corak?

Mengapakah Nesting `async/waiit` dalam Promise Constructors sebagai Anti-Corak?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-16 13:49:12647semak imbas

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

Anti-Corak Nesting async/menunggu dalam Promise Constructors

Dalam keadaan ini, di mana fungsi async.eachLimit digunakan untuk mengurus bilangan operasi serentak, dilema timbul. Godaan awal adalah untuk menstrukturkan kod seperti berikut:

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
    });
  });
}

Walaupun kelihatan logik untuk mengisytiharkan fungsi "myFunction" sebagai tak segerak, ia tidak boleh dilaksanakan kerana panggilan balik dalaman bagi fungsi "eachLimit" kekal tidak boleh diakses. Walau bagaimanapun, pendekatan ini menimbulkan perangkap yang ketara: potensi ralat tidak dapat dikendalikan.

Pendekatan ini ialah contoh buku teks anti-corak yang melibatkan penggunaan janji dalam pembina janji lain. Dalam kes ini, risiko ralat yang tidak dapat dikendalikan adalah sangat akut. Untuk mengelakkan perkara ini, pertimbangkan coretan kod berikut:

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

(async () => {
  await p;
})().catch(e => console.log("Caught: " + e)); // Catches the error.

Dalam senario ini, sementara baris pertama membuang pengecualian, ralat dikendalikan dengan anggun oleh blok "tangkap" fungsi anak panah tak segerak. Pengendalian ralat yang betul adalah penting untuk mengekalkan kestabilan dan mengelakkan tingkah laku yang tidak dijangka dalam pangkalan kod anda.

Atas ialah kandungan terperinci Mengapakah Nesting `async/waiit` dalam Promise Constructors sebagai Anti-Corak?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn