@Aricus

Почему рекурсивная функция не завершается (jquery)?

var nextFileError = 0; // Ошибок загрузки файлов
function nextFile(remainingFiles, fileClass, fileFolder, fileLogin, filePass) { // Отправка следующего файла для последовательной обработки
	let next = remainingFiles.pop(); // В ajax отправляется последний элемент, остальные сохраняются для рекурсии
	$.ajax({
		type: "POST",
		url: "ajax/get_part_allfiles.php",
		data: {data: next, class: fileClass, folder: fileFolder, login: fileLogin, pass: filePass}
	}).done(function(result) {
		if (result.length > 2) {
			console.log(result);
			nextFileError++;
		}
		if (nextFileError === 1) {
			$('#allfilesResult').removeClass('mess-good').addClass('mess-common');
		}
		if (nextFileError > 0) {
			$('#allfilesResult').html('Производится копирование файлов. Осталось: ' + remainingFiles.length + ', ошибок: ' + nextFileError);
		} else {
			$('#allfilesResult').html('Производится копирование файлов. Осталось: ' + remainingFiles.length);
		}
		console.log('Точка 2 - ' + remainingFiles.length);
		if (remainingFiles.length > 0) {
			nextFile(remainingFiles, fileClass, fileFolder, fileLogin, filePass); // Рекурсия тут
		} else {
			console.log('Точка 4');
		}
	}).fail(function (jqXHR, textStatus, errorThrown) {
		console.log('Ошибка ajax ' + textStatus + ': ' + errorThrown);
	});
		console.log('Точка 3 - ' + remainingFiles.length);
}
$(document).ready(function () {
	// Отправка файлов на изменение из мастера настроек
	if ($("div").is("#allfiles")) {
		let allfiles = $.parseJSON($('#allfiles').html());
			$('#allfilesResult').removeClass('st-none');
		if ($.isArray(allfiles) && allfiles.length > 0) {
			nextFile(allfiles, $('#allfiles').attr('data-class'), $('#allfiles').attr('data-folder'), $('#allfiles').attr('data-login'), $('#allfiles').attr('data-pass')); // Тут запускаем функцию
			console.log('Точка 1'); // Этого не происходит
			if (nextFileError === 0) {
				$('#allfilesResult').html('Копирование файлов успешно завершено.');
			} else {
				$('#allfilesResult').removeClass('mess-good').addClass('mess-common').html('Копирование файлов завершено. Ошибок: ' + nextFileError + '. Посмотрите ошибки <a href="customization.php?type=paramcommon">здесь</a> и обратитесь к разработчику.');
			}
		} else {
			$('#allfilesResult').removeClass('mess-good').addClass('mess-common').html('Нет файлов, которые нужно копировать.');
		}
	}

После отработки скрипта в консоли следующее (привожу только последние записи):
Точка 3 - 2
Точка 2 - 2
Точка 3 - 1
Точка 2 - 1
Точка 3 - 0
Точка 2 - 0
Точка 4

Пожалуйста, подскажите, почему скрипт не доходит до "Точка 1"? Соответственно, не выполняется и то, что написано после.
  • Вопрос задан
  • 44 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы