JavaScript — обещание асинхронного генератора и массива

Асинхронный генератор и обещание массива

Предполагая, что вы хотите, чтобы массив Promises разрешался в порядке второго параметра, передаваемого в setTimeout , вам нужно правильно их обесценивать. (Не вызывайте setTimeout скорее, просто передайте setTimeout resolve в setTimeout .) Затем .then цепочку .then к каждому Promise, который помещает значение разрешения в массив. Promise.all в массиве Promises, а затем вы можете обратить массив значений и yield каждое из них:

 async function* promisGenerator(arrPromise) { const resolvedValues = []; arrPromise.forEach(prom ={amp}gt; prom.then(value ={amp}gt; resolvedValues.push(value))); await Promise.all(arrPromise); resolvedValues.reverse(); for (const value of resolvedValues) { yield value; } } const promisList = [ new Promise(resolve ={amp}gt; setTimeout(resolve, 200, 15)), new Promise(resolve ={amp}gt; setTimeout(resolve, 600, 17)), new Promise(resolve ={amp}gt; setTimeout(resolve, 500, 42)) ]; (async() ={amp}gt; { const asyncGenerator = promisGenerator(promisList); for await (let value of asyncGenerator) { console.log(value); // 17, 42, 15, } })(); 
Понравилась статья? Поделиться с друзьями:
JavaScript & TypeScript
Adblock
detector