如何在JavaScript / TypeScript中等待Promise列表?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在JavaScript / TypeScript中等待Promise列表?相关的知识,希望对你有一定的参考价值。

我有以下代码,fileStatsPromisesPromise<Stats>[]foobar都是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);
})();

Screenshot

答案

这是对的:

const bar = await Promise.all(promiseArray);

await Promise.all([...])获取Promise数组并返回一系列结果。

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

另一答案

我不确定你的意思,但也许是bar.then(function(){ alert('complete') })

以上是关于如何在JavaScript / TypeScript中等待Promise列表?的主要内容,如果未能解决你的问题,请参考以下文章

typeScrip泛型

一篇缺失的 TypeScript 介绍

如何重试 Promise 解决 N 次,尝试之间有延迟?

探索typescript的必经之路-----接口(interface)

TypeScript入门知识一(字符串特性)

来了,TypeScript 4.3 发布!