44

次のコードがあります。 fileStatsPromisesis of Promise<Stats>[]、 bothfooおよびbararePromise<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);
})();

スクリーンショット

4

2 に答える 2

85

正解です:

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
于 2016-10-07T16:21:18.977 に答える
1

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

于 2019-02-24T08:49:22.633 に答える