Bagaimana untuk Mengendalikan Panggilan Fungsi Asynchronous dalam JavaScript For Loops?

DDD
Lepaskan: 2024-10-28 03:54:30
asal
275 orang telah melayarinya

How to Handle Asynchronous Function Calls within JavaScript For Loops?

Invokasi Fungsi Asynchronous dalam For Loops dalam JavaScript

Sifat tak segerak JavaScript boleh menimbulkan cabaran apabila menggunakan fungsi tak segerak dalam untuk gelung. Pertimbangkan kod berikut:

for(var i = 0; i < list.length; i++){
    mc_cli.get(list[i], function(err, response) {
        do_something(i);
    });
}
Salin selepas log masuk

Isunya terletak pada fungsi panggil balik tak segerak, yang mungkin dilaksanakan selepas gelung for selesai. Akibatnya, do_something(i) akan sentiasa merujuk lelaran akhir gelung.

Percubaan Penyelesaian dengan Penutupan

Pemaju cuba menggunakan penutupan untuk menangkap nilai i dalam setiap lelaran gelung:

do_something((function(x){return x})(i))
Salin selepas log masuk

Walau bagaimanapun, pendekatan ini juga gagal kerana fungsi tersebut dilaksanakan serta-merta, mengakibatkan isu yang sama.

Penyelesaian Menggunakan forEach

Penyelesaian yang lebih cekap ialah menggunakan kaedah JavaScript forEach, yang menyediakan item tatasusunan dan indeksnya kepada fungsi panggil balik. Memandangkan setiap panggilan balik mempunyai skopnya sendiri, nilai indeks dikekalkan.

list.forEach(function(listItem, index){
  mc_cli.get(listItem, function(err, response) {
    do_something(index);
  });
});
Salin selepas log masuk

Dengan menggunakan forEach, fungsi panggil balik kini mempunyai akses kepada nilai indeks yang betul untuk setiap lelaran, menyelesaikan isu indeks yang salah sedang dirujuk dalam fungsi do_something.

Atas ialah kandungan terperinci Bagaimana untuk Mengendalikan Panggilan Fungsi Asynchronous dalam JavaScript For Loops?. 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