Как мне ожидать список обещаний в JavaScript/TypeScript?
У меня есть следующий код, fileStatsPromises
имеет Promise<Stats>[]
, и то и другое foo
а также bar
являются Promise<Stats>[]
, Как правильно их ждать? я хочу получить <Stats>[]
,
const files = await readDir(currentDir);
const fileStatsPromises = files.map(filename => path.join(currentDir, filename)).map(stat);
const foo = await fileStatsPromises;
const bar = await Promise.all(fileStatsPromises);
РЕДАКТИРОВАТЬ: минимальный пример.
function makePromise() {
return Promise.resolve("hello");
}
const promiseArray = [];
// const promiseArray = [] as Promise<string>[];
for (let i = 0; i < 10; i++) {
promiseArray.push(makePromise());
}
(async () => {
const foo = await promiseArray;
const bar = await Promise.all(promiseArray);
})();
2 ответа
Это правильно:
const bar = await Promise.all(promiseArray);
await Promise.all([...])
принимает массив Promises и возвращает массив результатов.
bar
будет массив: ['hello', ..., 'hello']
Вы также можете деконструировать полученный массив:
const [bar1, ..., bar10] = await Promise.all(promiseArray);
console.log(bar1); // hello
console.log(bar7); // hello
Пожалуйста, используйте Promise.all()
, Пожалуйста, обратитесь к официальной документации https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
Вы можете использовать для... из
for(let task of tasks){
await task.exec()
}
Для получения дополнительной информации проверьте здесь - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of
Я не уверен, что вы имеете в виду, но, возможно,bar.then(function(){ alert('complete') })