Есть ли возможность двух асинхронных экземпляров функции JavaScript, выполняющих два блока кода одновременно?

Я понимаю, что JavaScript не имеет нескольких потоков, но я хотел бы знать, имеет ли следующий код шанс повреждения. Мое понимание - это, если асинхронная функция не вызвана, такой как setTimeout или вызов Ajax, что, после того как блок кода начинает выполняться, нет никакого пути к нему для приостановки, пока он не завершает или действительно вызывает асинхронную функцию.

В основном пользователи устанавливают несколько флажков, и затем нажимает кнопку, которая выполняет обработку Ajax их выборов. Моя цель состоит в том, чтобы иметь значок "Saving...", который остается только, пока все процессы Ajax не завершены, и в конце концов закончены, отображают сообщение успеха.

Запрет любых ошибок Ajax, пока функция обратного вызова в jQuery.post выполняется в целом без прерывания, я не вижу как if(numProcessed == toProcess) когда-либо выполнялся бы несколько раз или меньше, чем однажды. Но если два обратных вызова Ajax входят в функцию обратного вызова, оба увеличивают numProcessed счетчик, прежде чем любой добирается до следующего if, затем кажется, что код внутри был бы выполнен дважды.

var numProcessed = 0;
var checkedBoxes = jQuery("input[type=checkbox]:checked");
var toProcess = checkedBoxes.size();

checkedBoxes.each(function() {
  jQuery.post('somepage.php',{...},function(results) {
    numProcessed++;
    if(numProcessed == toProcess) {
      jQuery("#saving-message").remove();
      jQuery("#feedback-panel").text('Successfully processed all selections.');
    }
  }
}
6
задан aw crud 23 July 2010 в 18:29
поделиться