Sergey
а вот так всё ок
Sergey
на большом массиве дохрена копий будет
Sergey
массив промисов vs массив функций возвращающих промисы
Sergey
посмотри const list
Sergey
в обоих случаях
Zaur
var tasks = []; tasks.push(Promise.resolve(1)); tasks.push(Promise.reject('err')); tasks.push(Promise.resolve(2)); function runTasks(tasks) { if (!tasks.length) { console.log('complete'); return Promise.resolve(); } return tasks.shift() .then(function(res) { console.log('res:', res); return runTasks(tasks); }) .catch(function(err) { console.log('err', err); return runTasks(tasks); }) }; Вывод в консоль: res: 1 err err res: 2 complete все норм ))
Sergey
не норм
Sergey
Sergey
у тебя старая нода
Sergey
и это не корректный способ
Sergey
можно добавить forEach по списку
Sergey
выглядит как костыль
Sergey
но решает
Zaur
у тебя старая нода
node version: v7.10.0 res: 1 err err res: 2 complete
Sergey
спора нет просто как правильно последовательно обойти все промисы, и чтоб не свалилось от одного упавшего
Sergey
Sergey
массивы иммутабельны) по своей сути внутри массив будет дублирован а старый выкинут сборщику (могу ошибаться)
Zaur
у меня не ругается так :( почему?
Anonymous
народ кто пользуется редактором атом ?
Sergey
да, скорее всего ошибаюсь
Sergey
OSX
у меня тоже
Anonymous
кто пользуется Атом. как убрать окошко Key binding
Anonymous
Sergey
ты не в курсе как делать скриншоты?
Sergey
я запускаю его код, у меня ругается
Sergey
мб он запускает не такой же код как тот который скинул
Sergey
var tasks = []; tasks.push(Promise.resolve(1)); tasks.push(Promise.reject('err')); tasks.push(Promise.resolve(2)); function runTasks(tasks) { if (!tasks.length) { console.log('complete'); return Promise.resolve(); } return tasks.shift() .then(function(res) { console.log('res:', res); return runTasks(tasks); }) .catch(function(err) { console.log('err', err); return runTasks(tasks); }) };
Anonymous
нет )))
Zaur
ну да, поэтому я и говорю что код рабочий) а сова говорит нет, пытаюсь понять почему
Sergey
нет )))
какая система
Anonymous
винда
Anonymous
7
Konstantin
винда
Win+PrintScreen
Sergey
кнопка PrintScreen или же monosnap, joxy
Sergey
а вообще пиши на es7 с const/let, async/await и без прототипов и self
Anonymous
благодарю всех
Sergey
@abdulgalimov вот твоё решение
Sergey
Sergey
ниже)
Zaur
Sergey
кстати, и зачем в рекурсию, если можно без неё?
Sergey
а у меня кстати, более реальный пример, ты сразу зарезолвленные промисы кидаешь
Sergey
это не мой код
Sergey
во первых я так таски делаю
Sergey
во вторых, я не мутирую массив
Sergey
и без рекурсии
Sergey
и результаты собираю
Sergey
если что, node v 7.10 умеет async/await из коробки
Sergey
нет если один упал, все падает с ошибкой
Sergey
вот мой результат
Sergey
@abdulgalimov теперь ты разобрался в списках промисов))
Zaur
@abdulgalimov теперь ты разобрался в списках промисов))
вопросы все равно остались) почему у тебя ошибка, а у меня нет. И почему мой способ плохой? ))
Sergey
да, можно было results.push(await prom)
Sergey
вопросы все равно остались) почему у тебя ошибка, а у меня нет. И почему мой способ плохой? ))
если задачуц можно решить без рекурсии, лучше решить Без рекурсии
Sergey
а асинхронные циклы ещё и понятны
Zaur
стеку? разрыв стека разве не происходит ?
Sergey
лол
Zaur
стек разрывается @Fl0pZz @sergeysova
Zaur
В captureStackTrace же нет кучи вызовов runTasks, только последний. Значит переполнения стека нет.
Zaur
А раз нет переполнения стека, значит это не рекурсия, а просто множественный вызов одной функции :) @Fl0pZz @sergeysova
Sergey
рекурсия это вызов функции из этой же функции
Sergey
лучше без неё решать
Sergey
проще для восприятия
Zaur
рекурсия это вызов функции из этой же функции
не совсем, я же runTask вызываю не из runTask а из обработчика промися
Sergey
так они не последовательно выполнятся но да так лучше)
Sergey
а потом Promise.all()