Bagaimanakah Promise.all Memperkemas Pengambilan URL Tak Segerak untuk Kecekapan Dipertingkat?

DDD
Lepaskan: 2024-10-28 04:36:30
asal
337 orang telah melayarinya

How can Promise.all Streamline Asynchronous URL Fetching for Enhanced Efficiency?

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))
  })
Salin selepas log masuk

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...
})
Salin selepas log masuk

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...
})
Salin selepas log masuk

atau lebih ringkas lagi menggunakan await:

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

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!