Я понимаю, что 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.');
}
}
}