Rumah >hujung hadapan web >tutorial js >Bagaimanakah Saya Boleh Mengendalikan Tatasusunan Tertunda dengan betul dengan $.when() jQuery?
Mengendalikan Tatasusunan Tertunda dalam $.when()
Apabila bekerja dengan tatasusunan janji Tertunda, adalah penting untuk mengetahui cara mengendalikannya apabila menghantarnya ke $.when(). Dalam artikel ini, kami akan menyelidiki isu di mana tatasusunan Tertunda tidak dikendalikan dengan betul oleh $.when() dan menyediakan penyelesaian.
Masalahnya
Pertimbangkan kod berikut:
function getSomeDeferredStuff() { var deferreds = []; for (i = 1; i <= 10; i++) { var count = i; deferreds.push( $.post('/echo/html/', { html: '<p>Task #' + count + ' complete.', delay: count }).success(function(data) { $("div").append(data); })); } return deferreds; } $(function() { $("a").click(function() { var deferreds = getSomeDeferredStuff(); $.when(deferreds).done(function() { $("div").append('<p>All done!</p>'); }); }); });
Dalam contoh ini, "Selesai!" akan muncul selepas semua tugas tertunda selesai. Walau bagaimanapun, $.when() tidak mengenali tatasusunan Tertunda sebagai entiti tunggal, menyebabkan "Semua selesai!" dipaparkan lebih awal.
Penyelesaian
Untuk menghantar tatasusunan Tertunda kepada $.when(), gunakan Function.prototype.apply:
$.when.apply($, my_array).then( ___ );
Fungsi ini mengambil tatasusunan parameter dan menggunakannya pada fungsi. Contohnya:
$.when.apply($, deferreds).then(function() { $("div").append('<p>All done!</p>'); });
Sebagai alternatif, dalam ES6 anda boleh menggunakan operator spread:
$.when(...my_array).then( ___ );
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mengendalikan Tatasusunan Tertunda dengan betul dengan $.when() jQuery?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!