Rumah >hujung hadapan web >tutorial js >Bagaimana untuk Melaksanakan Panggilan Balik Selesai untuk Asynchronous forEach Gelung?

Bagaimana untuk Melaksanakan Panggilan Balik Selesai untuk Asynchronous forEach Gelung?

DDD
DDDasal
2024-11-04 13:09:01704semak imbas

How to Implement a Completion Callback for Asynchronous forEach Loops?

Asynchronous forEach Callback: Melaksanakan Panggilan Balik Selesai

Dalam senario di mana gelung tak segerak seperti forEach digunakan, keperluan sering timbul untuk mencetuskan panggil balik setelah semua operasi tak segerak selesai. Panduan ini membentangkan beberapa pendekatan untuk mencapai fungsi ini.

1. Menggunakan Pembilang Mudah

Teknik ini menggunakan pembilang yang bertambah setiap kali item diproses. Apabila kaunter mencapai jumlah bilangan item, panggilan balik penyelesaian akan dipanggil.

function callback () { console.log('all done'); }

var itemsProcessed = 0;

[1, 2, 3].forEach((item, index, array) => {
  asyncFunction(item, () => {
    itemsProcessed++;
    if(itemsProcessed === array.length) {
      callback();
    }
  });
});

2. Memanfaatkan Janji ES6

Janji membolehkan penciptaan rantai janji berurutan, memastikan pelaksanaan segerak bagi tugas tak segerak.

function asyncFunction (item, cb) {
  setTimeout(() => {
    console.log('done with', item);
    cb();
  }, 100);
}

let requests = [1, 2, 3].reduce((promiseChain, item) => {
    return promiseChain.then(() => new Promise((resolve) => {
      asyncFunction(item, resolve);
    }));
}, Promise.resolve());

requests.then(() => console.log('done'))

3. Menggunakan Perpustakaan Asynchronous

Perpustakaan seperti "async" menyediakan mekanisme untuk menyatakan fungsi yang diingini. Pelaksanaan khusus akan berbeza-beza bergantung pada perpustakaan yang dipilih.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Panggilan Balik Selesai untuk Asynchronous forEach Gelung?. 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