Dalam coretan kod:
var arr = [1,2,3,4,5]; var results: number[] = await arr.map(async (item): Promise<number> => { await callAsynchronousOperation(item); return item + 1; });
anda menerima ralat "TS2322: Taip 'Promise< ;number>[]' tidak boleh diberikan untuk menaip 'number[]'". Ralat ini menandakan ketidakpadanan antara jenis yang dijangkakan (nombor[]) dan jenis sebenar (Janji
Isunya
Masalah timbul kerana anda cuba menunggu pelbagai janji (Janji
Penyelesaian
Untuk membetulkan ralat ini, anda boleh menggunakan Promise.all untuk mengubah tatasusunan Promise
Dengan menggunakan Promise.all, anda menukar tatasusunan janji anda kepada satu Janji, membolehkan anda menunggu penyelesaian semua janji serentak.
var arr = [1, 2, 3, 4, 5]; var results: number[] = await Promise.all(arr.map(async (item): Promise<number> => { await callAsynchronousOperation(item); return item + 1; }));
Sebagai alternatif, pertimbangkan untuk menggunakan Promise.allSettled, Promise.any, atau Promise.race bergantung pada kes penggunaan khusus anda. Walau bagaimanapun, untuk senario yang anda berikan, Promise.all kekal sebagai pilihan yang paling sesuai.
Atas ialah kandungan terperinci Mengapa `menunggu arr.map()` Gagal, dan Bagaimana `Promise.all` Boleh Membetulkannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!