web-dev-qa-db-ja.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

24
Zen

これは正しいです:

_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
_
52
Westy92

Promise.all()を使用してください。公式ドキュメントを参照してください https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/all

0
null1941