Sergey
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
но решает
Sergey
Zaur
Sergey
спора нет
просто как правильно последовательно обойти все промисы, и чтоб не свалилось от одного упавшего
Sergey
Sergey
массивы иммутабельны) по своей сути
внутри массив будет дублирован
а старый выкинут сборщику
(могу ошибаться)
Zaur
у меня не ругается так :( почему?
Anonymous
народ кто пользуется редактором атом ?
Sergey
да, скорее всего ошибаюсь
Sergey
Zaur
Sergey
Anonymous
кто пользуется Атом.
как убрать окошко
Key binding
Anonymous
Sergey
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
Anonymous
нет )))
Zaur
ну да, поэтому я и говорю что код рабочий) а сова говорит нет, пытаюсь понять почему
Sergey
Anonymous
винда
Sergey
Anonymous
7
Konstantin
Sergey
кнопка PrintScreen или же monosnap, joxy
Sergey
Sergey
а вообще пиши на es7
с const/let, async/await и без прототипов и self
Anonymous
благодарю всех
Sergey
@abdulgalimov вот твоё решение
Sergey
Sergey
ниже)
Zaur
Sergey
кстати, и зачем в рекурсию, если можно без неё?
Sergey
а у меня кстати, более реальный пример, ты сразу зарезолвленные промисы кидаешь
Zaur
Sergey
это не мой код
Sergey
во первых я так таски делаю
Sergey
во вторых, я не мутирую массив
Sergey
и без рекурсии
Sergey
и результаты собираю
Sergey
если что, node v 7.10 умеет async/await из коробки
Sergey
нет
если один упал, все падает с ошибкой
Sergey
Sergey
@abdulgalimov теперь ты разобрался в списках промисов))
Sergey
да, можно было
results.push(await prom)
Sergey
Sergey
Sergey
а асинхронные циклы ещё и понятны
Zaur
стеку? разрыв стека разве не происходит ?
Sergey
Sergey
лол
Zaur
стек разрывается @Fl0pZz @sergeysova
Zaur
В captureStackTrace же нет кучи вызовов runTasks, только последний. Значит переполнения стека нет.
Zaur
А раз нет переполнения стека, значит это не рекурсия, а просто множественный вызов одной функции :) @Fl0pZz @sergeysova
Sergey
Sergey
рекурсия это вызов функции из этой же функции
Sergey
лучше без неё решать
Sergey
проще для восприятия
Sergey
Sergey
так они не последовательно выполнятся
но да
так лучше)
Sergey
а потом Promise.all()