Я прошу прощения, если это было затронуто ранее ... но я не смог найти вопрос, который дал мне ответ ... или, возможно, если бы существовал тот, который я встретил ... это не так нажмите для меня.
Итак, у меня изначально был следующий код, который я пытался использовать:
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.log('index =>', index);
console.log('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.log('index =>', index);
console.log('nums[' + index + '] === ' + nums[index]);
return ++index;
});
}
Я бы хотел знать, почему arr становится неопределенным ... не имеет смысла для меня, так как nums сохраняет область действия ... но, по-видимому, arr нет?
[Редактировать: Выбранный ответ]
Так что спасибо @Evert и дальнейшим разъяснениям от @Phil. Я не понимал, решимость использовал только первый аргумент. С этой информацией ... следующий код помог вам, у кого может быть проблема. Я до сих пор не могу поверить, что я не осознавал, что было только возвращаемое значение индекса ++ ... вздох.
Блок рабочего кода:
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.log('index =>', params.index);
console.log('nums[' + params.index + '] === ' + params.arr[params.index]);
return {index: ++params.index, arr: params.arr};
});
}