Rumah > hujung hadapan web > tutorial js > Bagaimanakah Saya Boleh Mengendalikan Tatasusunan Tertunda dengan betul dengan $.when() jQuery?

Bagaimanakah Saya Boleh Mengendalikan Tatasusunan Tertunda dengan betul dengan $.when() jQuery?

Mary-Kate Olsen
Lepaskan: 2024-12-10 20:54:16
asal
935 orang telah melayarinya

How Can I Correctly Handle Arrays of Deferreds with jQuery's $.when()?

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

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( ___ );
Salin selepas log masuk

Fungsi ini mengambil tatasusunan parameter dan menggunakannya pada fungsi. Contohnya:

$.when.apply($, deferreds).then(function() {
  $("div").append('<p>All done!</p>');
});
Salin selepas log masuk

Sebagai alternatif, dalam ES6 anda boleh menggunakan operator spread:

$.when(...my_array).then( ___ );
Salin selepas log masuk

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan