Как Array.map цепочку от асинхронного ожидания? - PullRequest
0 голосов
/ 18 мая 2019

Как я могу запустить 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 голосов
/ 18 мая 2019

Вы также можете использовать Promise.Так что в вашем случае:

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

Метод Promise.all (iterable) возвращает обещание, которое разрешается, когда все обещания в итерируемом аргументе разрешены, или отклоняется по причине первогопрошло обещание, которое отклоняет.

0 голосов
/ 18 мая 2019

Всегда можно использовать скобки, чтобы изменить приоритет оператора:

 (await walk(CLASS_PATH)).map(/*...*/)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...