私は次のコードを持っています、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);
})();
これは正しいです:
_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