Прошу прощения, если этот вопрос уже затрагивался... но я не смог найти вопрос, который дал мне ответ... или, возможно, если бы он существовал, на который я наткнулся... он не щелкнул для меня. .
Итак, изначально у меня был следующий код, который я пытался использовать:
var nums = [];
for (var i = 0; i < 100; i++)
nums.push(i * 5);
var nextPromise = Promise.resolve(0, nums);
for (var i = 0; i < nums.length; i++){
nextPromise = nextPromise.then((index, arr) => {
console.info('index =>', index);
console.info('nums[' + index + '] === ' + arr[index]);
return ++index;
});
}... но arr[index] приведет к тому, что arr будет неопределенным, и я получу сообщение об ошибке...
(index):40 Uncaught (in promise) TypeError: Cannot read property '0' of undefined
Может ли кто-нибудь объяснить мне, почему arr становится неопределенным? Это было запущено в JsFiddle, если это поможет.
Я придумал тот, который отлично работает... но я не понял, почему передачи массива через возвращаемые значения каждого обещания было недостаточно... следующий код работает нормально... Я просто обращаюсь к числам на внутреннем область, которая все еще поддерживается из внешней области:
var nums = [];
for (var i = 0; i < 100; i++)
nums.push(i*5);
var nextPromise = Promise.resolve(0);
for (var i = 0; i < nums.length; i++) {
nextPromise = nextPromise.then(index => {
console.info('index =>', index);
console.info('nums[' + index + '] === ' + nums[index]);
return ++index;
});
}Я хотел бы знать, почему arr становится неопределенным... для меня это не имеет смысла, поскольку nums сохраняет область действия... но, похоже, arr - нет?
[Редактировать: после выбора ответа] Так что благодаря @Evert и дальнейшим разъяснениям от @Phil. Я не понял, что разрешение использовало только первый аргумент. С этой информацией... следующий код помог всем, у кого могут возникнуть проблемы. Я до сих пор не могу поверить, что не понимал, что есть только возвращаемое значение ++index... вздох.
Блок рабочего кода:
var nums = [];
for (var i = 0; i < 100; i++)
nums.push(i * 5);
var nextPromise = Promise.resolve({index: 0, arr: nums});
for (var i = 0; i < nums.length; i++){
nextPromise = nextPromise.then(params => {
console.info('index =>', params.index);
console.info('nums[' + params.index + '] === ' + params.arr[params.index]);
return {index: ++params.index, arr: params.arr};
});
}
@ Фил, я не знал, что он использовал только первый аргумент ... зная, что я нашел решение, которое работает. Я собираюсь отредактировать это в вопросе для всех, кому это нужно.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Когда ваш обратный вызов из then() возвращает значение, это значение будет использоваться в качестве первого аргумента следующей функции then().
Используется только первый аргумент в обратном вызове then().
Когда я заметил, что есть ответ, я еще раз посмотрел... и понял, что возвращаю только ++index... ну. У меня был один раньше, чем возвращенный Promise.resolve(++index, arr)... но я не думаю, что правильно подключил его. Лол... цифры. Спасибо чувак.
Из документация обещание может разрешаться только с одним значением.