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?

Bagaimanakah saya boleh menggunakan `Promise.all` untuk mendapatkan semula data daripada tatasusunan URL dan mencipta tatasusunan kandungan teks yang sepadan?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-29 02:38:02343semak imbas

How can I use `Promise.all` to retrieve data from an array of URLs and create a corresponding array of text content?

Menggunakan Promise.all untuk Mendapatkan Susunan URL

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!

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