Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Cekap Mengambil Data daripada Berbilang URL dengan Promise.all?

Bagaimana untuk Cekap Mengambil Data daripada Berbilang URL dengan Promise.all?

Patricia Arquette
Patricia Arquetteasal
2024-10-29 05:24:02296semak imbas

How to Efficiently Fetch Data from Multiple URLs with Promise.all?

Menakluki Berbilang Pengambilan URL dengan Promise.semua

Dalam bidang pengaturcaraan tak segerak, Promises menawarkan mekanisme yang berkuasa untuk mengendalikan tugas tak segerak seperti mengambil data daripada berbilang URL. Seperti yang anda temui, cuba memasukkan kes penggunaan ini ke dalam paradigma Promise.all boleh menjadi batu penghalang.

Mari kita rungkai penyelesaian percubaan anda:

var promises = urls.map(url => fetch(url));
var texts = [];
Promise.all(promises)
  .then(results => {
     results.forEach(result => result.text()).then(t => texts.push(t))
  })

Kaedah ini mengalami masalah kecacatan penting: forEach tidak mengembalikan tatasusunan mahupun Promise, menjadikan anda dalam kekosongan janji tanpa cara untuk mengakses teks yang diambil.

Untuk membetulkannya, Promise.all mesti digunakan dua kali, sekali untuk mengambil URL dan sekali untuk mengekstrak teks daripada respons:

Promise.all(urls.map(u=>fetch(u))).then(responses =>
    Promise.all(responses.map(res => res.text()))
).then(texts => {
    …
})

Sebagai alternatif, anda boleh menyelaraskan proses dengan menggabungkan pengambilan dan perolehan teks ke dalam satu langkah:

Promise.all(urls.map(url =>
    fetch(url).then(resp => resp.text())
)).then(texts => {
    …
})

Untuk lebih lanjut penyelesaian ringkas, terima kuasa async/waiit:

const texts = await Promise.all(urls.map(async url => {
  const resp = await fetch(url);
  return resp.text();
}));

Pendekatan ini memberi anda keupayaan untuk mengendalikan berbilang pengambilan URL dengan cekap, membolehkan anda membina objek yang diingini yang mengandungi teks yang diekstrak.

Atas ialah kandungan terperinci Bagaimana untuk Cekap Mengambil Data daripada Berbilang URL dengan Promise.all?. 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