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

时间:2016-05-21 08:23:30

标签: javascript typescript async-await ecmascript-next

我有以下代码,fileStatsPromises属于Promise<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

4 个答案:

答案 0 :(得分:38)

这是正确的:

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

答案 1 :(得分:0)

您可以用于...的

for(let task of tasks){
    await task.exec()
}

有关更多信息,请点击此处-https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for...of

答案 2 :(得分:0)

答案 3 :(得分:-2)

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