如何将Array.map链从异步等待中关闭?

时间:2019-05-17 21:43:24

标签: javascript arrays asynchronous functional-programming async-await

如何在等待状态下运行Array.map?

const CLASS_PATH = 'User/matt/Github/project';
const PACKAGE_JSON = 'package.json';

const walk = async path => {
  let dirs = [];
  for (const file of await readdir(path)) {
    if ((await stat(join(path, file))).isDirectory()) {
      dirs = [
        ...dirs,
        file,
      ];
    }
  }
  return dirs;
};


async function main() {
  const packagePaths = await walk(CLASS_PATH)
        .map(pkgName => join(CLASS_PATH, pkgName, PACKAGE_JSON));

}
main();

2 个答案:

答案 0 :(得分:0)

始终可以使用方括号来更改操作员的先决条件:

 (await walk(CLASS_PATH)).map(/*...*/)

答案 1 :(得分:0)

您也可以使用Promise。 因此,在您的情况下:

const packagePaths = await Promise.all(walk(CLASS_PATH).map(async (item): Promise<number> => {
    await join(CLASS_PATH, pkgName, PACKAGE_JSON);
}));
  

Promise.all(iterable)方法返回一个在以下情况下解析的承诺   可迭代参数中的所有承诺都已解决或被拒绝   第一个通过的承诺被拒绝的原因。