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
Mary-Kate Olsenasal
2024-12-10 20:54:16917semak imbas

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>');
    });
  });
});

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!

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