Вопрос №55909 от пользователя Дмитрий Боровик в уроке «Promise.all», курс «JS: Асинхронное программирование»
Добрый день. Задание решил, но из двух похожих решений одно не работает. Это работает https://ru.hexlet.io/code_reviews/422972?submission_id=539050, это не работает https://ru.hexlet.io/code_reviews/422972?submission_id=539107. Визуально, они друг от друга отличаются только тем, что одно решено непрерывно цепочкой, другое разделено. Из тестов догадываюсь , что в Promise.all попадает 1 промис. В чем причина?
Я так понимаю, массив промисов мы можем получить только в результате вычисления какой то одной функции, иначе это будет просто промис.
Приветствую, Дмитрий!
Из тестов догадываюсь , что в Promise.all попадает 1 промис. В чем причина?
Всё верно, именно в этом и дело. Второе решение не работает потому, что getFiles содержит один промис. Массив промисов в вашем решении формируется внутри второго вызова then() в результате вызова функции map(). Соответственно Promise.all() нужно использовать именно там, где появляется массив промисов.
Я так понимаю, массив промисов мы можем получить только в результате вычисления какой то одной функции, иначе это будет просто промис.
Тут по-разному может быть, например массив промисов может быть получен в результате вызова асинхронной функции n раз. Но также у вас может быть и вручную сформировано несколько промисов, которые можно объединить в массив и передать в итоге в Promise.all(). В общем всё зависит от логики самого кода.
Добрый день, Дмитрий! По второму комментарию я вижу, что вы уже поняли в чем проблема. Функция Promise.all()
принимает на вход массив промисов. Используйте отладочную печать, чтобы посмотреть, что находится в переменной getFiles. Массив промисов можно получить и получить и собрав его вручную, как в примере из урока:
const promise1 = fsp.readFile(inputPath1, 'utf-8');
const promise2 = fsp.readFile(inputPath2, 'utf-8');
// На вход идет МАССИВ из промисов
const promise = Promise.all([promise1, promise2]);
или изначально обрабатывая массив:
onst promises = filepaths.map((filepath) => fsp.readFile(filepath, 'utf-8')
.then((v) => ({ result: 'success', value: v }))
Используйте Хекслет по максимуму!
- Задавайте вопросы по уроку
- Проверяйте знания в квизах
- Проходите практику прямо в браузере
- Отслеживайте свой прогресс
Зарегистрируйтесь или войдите в свой аккаунт
С нуля до разработчика. Возвращаем деньги, если не удалось найти работу.







