Я хотел бы знать причину поведения, которое я получаю с некоторыми обещаниями через некоторое время. L oop.
У меня был этот код, поэтому он должен запускать каждое обещание только после предыдущего обещания. решено. Поэтому, когда я запустил эту задачу, я написал что-то вроде этого:
while (i <= totalImages) {
if (previousDeferred === null) {
previousDeferred = prepare(i);
}
else {
previousDeferred = previousDeferred.then(prepare(i));
}
// code to calculate i value
}
Обратите внимание, что моя функция подготовки возвращает обещание, которое разрешается, когда изображение загружено и выполняется некоторая другая логика c. Но я заметил, что мой код ждал только того, что первое обещание будет разрешено, а затем все следующие изображения были загружены немедленно.
Я изменил свой код и написал функцию prepareImage, чтобы отделить логи c, поэтому там я получаю индекс для загрузки, и у меня тот же лог c, который у меня был в то время как l oop.
function prepareImage(i) {
if (previousDeferred === null) {
previousDeferred = prepare(i);
}
else {
previousDeferred = previousDeferred.then(function(){
return prepare(i);
});
}
}
while (i <= totalImages) {
tryToPrepare(paths[i]);
// code to calculate i value
}
Так что это работает правильно, но я не знаю причину, по которой первый код не работал, а второй работал должным образом, я думаю, что это что-то, связанное со значением i, возможно js создает цепочку, когда я использую функцию-обертку, так как она сохраняет свое значение и избегает цепочка, когда он знает, что это изменилось из-за l oop, но я не совсем уверен.
Может кто-нибудь помочь мне понять это?