Как мне ожидать список обещаний в 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') })

Другие вопросы по тегам