Я не понимаю поведение этой программы javascript. Мое намерение состояло в том, чтобы последовательно извлечь три пронумерованных ресурса, но кажется, что «i» было захвачено в замыкании, и используется только его окончательное значение.
function fetch(x) {
console.log('fetching resource ' + x);
}
var prom = Promise.resolve();
for(var i=1; i<=3; i++) {
prom = prom.then(() => { fetch(i);} );
}
//prints
//fetching resource 4
//fetching resource 4
//fetching resource 4
Я не знаю достаточно о js, чтобы решить эту проблему - как я могу изменить эту программу для получения 1, 2 и 3? Нужно ли где-нибудь использовать resol ()?
ОБНОВЛЕНИЕ: было отмечено, что этот вопрос дублирует закрытие JavaScript внутри циклов - простой практический пример , что технически верно, но, тем не менее, я думаю, что этот вопрос имеет свои достоинства из-за его нового применения в мир обещаний. Технически, вышеупомянутый вопрос действительно правильно отвечает на поставленный здесь вопрос, потому что элемент Обещания в этом вопросе оказывается красной сельдью, не имеющей отношения к ответу. Но признание Обещания неуместным - это понимание, полученное при чтении этого вопроса, а не вышеупомянутого дубликата.