Rumah > Artikel > hujung hadapan web > Bagaimanakah saya boleh menggunakan `Promise.all` untuk mendapatkan semula data daripada tatasusunan URL dan mencipta tatasusunan kandungan teks yang sepadan?
Mendapatkan semula data daripada pelbagai sumber boleh menjadi tugas biasa apabila berurusan dengan permintaan web. Promise.all ialah alat berguna dalam JavaScript yang membenarkan pelaksanaan berbilang operasi async serentak dan menggabungkan keputusannya menjadi satu Promise.
Masalahnya:
Bayangkan anda mempunyai tatasusunan URL dan bertujuan untuk mencipta objek yang mencerminkan struktur tatasusunan URL tetapi dengan kandungan setiap fail teks URL.
var urls = ['1.txt', '2.txt', '3.txt']; // These files contain "one", "two", "three" respectively. var result = ['one', 'two', 'three'];
Mendekati dengan Promise.all:
Apabila cuba menyelesaikan masalah ini menggunakan Promise.all pada mulanya, anda mungkin menghadapi kesukaran. Mari kita periksa pendekatan yang cacat:
var promises = urls.map(url => fetch(url)); var texts = []; Promise.all(promises).then(results => { results.forEach(result => result.text().then(t => texts.push(t))); });
Di sini, Promise.all digunakan pada tatasusunan Janji yang mewakili permintaan pengambilan. Walau bagaimanapun, pendekatan ini gagal menghasilkan tatasusunan ['satu', 'dua', 'tiga'] yang dikehendaki seperti yang dimaksudkan. Untuk membetulkannya, pertimbangkan penyelesaian yang diperhalusi ini:
Promise.all(urls.map(u => fetch(u))).then(responses => Promise.all(responses.map(res => res.text())) ).then(texts => { … });
Kod ini memulakan permintaan pengambilan untuk semua URL, diikuti dengan memproses respons untuk mendapatkan semula kandungan teks setiap URL. Hasilnya ialah tatasusunan nilai teks yang boleh diproses selanjutnya. Sebagai alternatif, kod tersebut boleh dipermudahkan menggunakan ciri JavaScript moden:
const texts = await Promise.all(urls.map(async url => { const resp = await fetch(url); return resp.text(); }));
Di sini, sintaks tak segerak/menunggu digunakan untuk mengendalikan operasi tak segerak dengan lebih ringkas.
Menggunakan Janji.semuanya dengan bijak bersama-sama dengan teknik ini, anda boleh mengambil dan memproses data dengan berkesan daripada pelbagai URL, membuka jalan untuk tugasan manipulasi data seterusnya.
Atas ialah kandungan terperinci Bagaimanakah saya boleh menggunakan `Promise.all` untuk mendapatkan semula data daripada tatasusunan URL dan mencipta tatasusunan kandungan teks yang sepadan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!