Pelaksanaan Berurutan Proses Tak Segerak dalam JavaScript Untuk Gelung
Apabila mencipta proses tak segerak dalam JavaScript untuk gelung, adalah penting untuk menangani isu mengekalkan nilai pembolehubah gelung. Secara lalai, gelung selesai sebelum proses tak segerak selesai, membawa kepada nilai pembolehubah yang salah dalam fungsi panggil balik.
Pendekatan Penyelesaian:
Menggunakan Penutupan Fungsi:
Dengan mencipta baris sebaris atau penutupan fungsi luaran untuk setiap lelaran gelung, pembolehubah indeks gelung ditangkap secara unik dalam penutupan. Ini memastikan bahawa setiap panggil balik mempunyai akses kepada nilai indeksnya sendiri.
Contoh 1 (Penutupan Sebaris):
someArray.forEach(function(item, i) { asynchronousProcess(function() { console.log(i); }); });
Contoh 2 (Luaran Penutupan):
(function(i) { asynchronousProcess(function() { console.log(i); }); })(i); ````
Mengeksploitasi ES6 Let:
Jika persekitaran JavaScript yang mematuhi ES6 tersedia, kata kunci let boleh digunakan dalam untuk permulaan gelung. mari cipta pembolehubah unik untuk setiap lelaran gelung, menangani isu skop.
for (let i = 0; i < 10; i++) { asynchronousProcess(function() { console.log(i); }); }
Bersiri dengan Janji:
Jika proses tak segerak kembali janji, mereka boleh bersiri untuk dijalankan satu demi satu menggunakan async dan menunggu. Ini menjamin pelaksanaan berurutan dan menghalang gelung daripada memajukan sehingga setiap operasi tak segerak selesai.
async function someFunction() { for (let i = 0; i < 10; i++) { await asynchronousProcess(); console.log(i); } }
Sejajar dengan Promise.all():
Untuk menjalankan proses tak segerak secara selari dan mengumpul hasil mengikut tertib, Promise.all() boleh diambil bekerja. Ia mengembalikan pelbagai hasil sebaik sahaja semua janji diselesaikan.
function someFunction() { let promises = []; for (let i = 0; i < 10; i++) { promises.push(asynchonousProcessThatReturnsPromise()); } return Promise.all(promises);
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Proses Asynchronous dengan Betul dalam JavaScript For Loops?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!