Rumah >hujung hadapan web >tutorial js >Mengapakah Menggunakan Async/Await Inside a Promise Constructor merupakan Anti-Corak?

Mengapakah Menggunakan Async/Await Inside a Promise Constructor merupakan Anti-Corak?

Susan Sarandon
Susan Sarandonasal
2025-01-05 11:23:41750semak imbas

Why is Using Async/Await Inside a Promise Constructor an Anti-Pattern?

Anti-Corak Promise Constructor: Menggunakan Async/Await Within Promise()

Dalam pengaturcaraan async, menggunakan async/menunggu dalam fungsi pelaksana daripada pembina Promise() dianggap sebagai anti-corak. Amalan ini melibatkan membenamkan janji dalam janji, yang membawa kepada kemungkinan ralat yang mungkin tidak disebarkan dengan betul.

Pertimbangkan coretan kod di bawah:

const { eachLimit } = require("async");

function myFunction() {
 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.
   });
 });
}

Dalam contoh ini, myFunction dipanggil dan Promise constructor digunakan dengan fungsi async sebagai pelaksananya. Corak ini bermasalah kerana ia boleh mengakibatkan ralat tidak disebarkan dengan betul. Jika sebarang ralat berlaku dalam panggil balik eachLimit, ia tidak akan ditangkap oleh Promise dan akan gagal secara senyap.

Selain itu, menggunakan async/wait dalam pembina Promise boleh menjadikan perangkap ini lebih mengejutkan. Sebagai contoh, bandingkan yang berikut:

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

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

Dalam contoh ini, TypeError dilemparkan secara serentak dalam fungsi pelaksana. Walau bagaimanapun, apabila Janji ditunggu menggunakan async/menunggu, ralat ditangkap oleh blok tangkapan, walaupun ia berlaku sebelum Janji diselesaikan. Tingkah laku ini boleh membawa kepada kekeliruan dan hasil yang tidak dijangka.

Untuk mengelakkan anti-corak ini, adalah disyorkan untuk mengelak daripada menggunakan async/menunggu dalam fungsi pelaksana pembina Promise(). Sebaliknya, gunakan kaedah then or catch untuk merangkai janji tambahan dan menangani ralat.

Atas ialah kandungan terperinci Mengapakah Menggunakan Async/Await Inside a Promise Constructor merupakan 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
Artikel sebelumnya:Kod Bersih Sifar kepada SatuArtikel seterusnya:Kod Bersih Sifar kepada Satu