Может ли кто-нибудь объяснить мне, почему этот «конвейер» JavaScript Promise не сохраняет массив, который я вставляю... но начальный индекс сохраняет?

Прошу прощения, если этот вопрос уже затрагивался... но я не смог найти вопрос, который дал мне ответ... или, возможно, если бы он существовал, на который я наткнулся... он не щелкнул для меня. .

Итак, изначально у меня был следующий код, который я пытался использовать:

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};
  });
}

Из документация обещание может разрешаться только с одним значением.

Phil 14.03.2019 02:38

@ Фил, я не знал, что он использовал только первый аргумент ... зная, что я нашел решение, которое работает. Я собираюсь отредактировать это в вопросе для всех, кому это нужно.

steviesama 14.03.2019 03:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
24
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Когда ваш обратный вызов из then() возвращает значение, это значение будет использоваться в качестве первого аргумента следующей функции then().

Используется только первый аргумент в обратном вызове then().

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

steviesama 14.03.2019 03:02

Другие вопросы по теме