Задать порядок выполнения промисов
Добрый день.
Подскажите, как можно задать порядок при выполнении промисов. Допустим, есть такой вот код function generate() { let ms = Math.round(Math.random() * 1000); return new Promise((resolve, reject) => { setTimeout(() => { resolve(ms); }, ms); }); } for (let i = 0; i < 3; i++) { Promise.all([generate(), generate(), generate()]) .then(value => log(value, i)); } Сейчас в цикле создается 3 промиса и выводятся они в порядке кто первый отработал. А как задать им последовательность? |
И еще, глупый вопрос, но все таки.
function generate(ms) { let number; setTimeout( () => { number = Math.round( Math.random() * 10 ); }, ms); return number; } Как присвоить number асинхронно значение и вернуть его при выполнении функции generate ? |
Цитата:
function generate() { let ms = Math.round(Math.random() * 1000); return new Promise((resolve, reject) => { setTimeout(() => { resolve(ms); }, ms); }); } let chain = generate(); for (let i = 0; i < 3; i++) { chain = chain.then(value => { console.log(value, i); return generate() }); } |
Цитата:
function generate(ms) { return new Promise((resolve, reject) => { let number; setTimeout( () => { number = Math.round( Math.random() * 10 ); resolve(number); }, ms); }) } generate(300).then(console.log); |
Цитата:
Во второй части, хотел бы уточнить, через промисы проблем это не вызвало, а как сделать без него и не вынося наверх интервал? Возможно ли это? Сугубо в своих интересах так сказать, чтобы лучше понять язык. |
Spirtikys,
Pub/sub. Но зачем, если есть промисы, бабель и полифилл? |
Цитата:
Можете рассказать по подробнее о pub\sub ? |
Часовой пояс GMT +3, время: 22:13. |