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!