Pengambilan URL Tak Segerak: Memanfaatkan Janji.semua untuk Kecekapan Dipertingkat
Utiliti Promise.all berfungsi sebagai alat penting untuk melaksanakan urutan secara serentak daripada tugas tak segerak. Memulakan tugas untuk mengambil tatasusunan URL, kami menyasarkan untuk mendapatkan tatasusunan analog yang merangkum kandungan teks yang sepadan. Sebelum mendalami usaha ini, refleksi sejenak tentang kelemahan pendekatan percubaan tertentu adalah wajar.
Coretan di bawah, semasa cuba mencapai objektif kami, gagal:
var promises = urls.map(url => fetch(url)); var texts = []; Promise.all(promises) .then(results => { results.forEach(result => result.text()).then(t => texts.push(t)) })
Pertama, pelaksanaan ini cacat secara konsep, kerana fungsi forEach tidak mengembalikan tatasusunan mahupun janji, menjadikannya tidak berkesan. Kedua, kod tersebut tidak mempunyai sarang yang diperlukan untuk mengendalikan sifat tak segerak pengekstrakan teks dengan sewajarnya.
Untuk membetulkan kelemahan ini, pendekatan pelbagai rupa diperlukan. Kami bermula dengan menggunakan Promise.all pada tatasusunan URL, mendapatkan semula tatasusunan janji yang mewakili operasi pengambilan individu. Setelah berjaya menyelesaikan pengambilan awal ini, doa Promise.all kedua digunakan untuk menangkap kandungan teks daripada badan respons. Nilai teks yang dikapsulkan kemudiannya diagregatkan ke dalam tatasusunan yang kohesif. Intipati pendekatan ini ditangkap secara elegan oleh kod berikut:
Promise.all(urls.map(u => fetch(u))).then(responses => Promise.all(responses.map(res => res.text())) ).then(texts => { // Proceed with texts array... })
Varian ringkas strategi ini melibatkan pengekstrakan secara langsung badan tindak balas semasa pemenuhan janji pengambilan awal:
Promise.all(urls.map(url => fetch(url).then(resp => resp.text()) )).then(texts => { // Proceed with texts array... })
atau lebih ringkas lagi menggunakan await:
const texts = await Promise.all(urls.map(async url => { const resp = await fetch(url); return resp.text(); }));
Atas ialah kandungan terperinci Bagaimanakah Promise.all Memperkemas Pengambilan URL Tak Segerak untuk Kecekapan Dipertingkat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!