Как я могу использовать klaw с async / await? - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь получить список всех файлов Java в каталоге, рекурсивно.Я пытаюсь использовать Klaw , но я не могу заставить его работать с async/await:

const files: string[] = [];
await klaw(myDir, { 
    filter: (item: any) => { return path.extname(item.path) === ".java"; }
}).on("data", (item) => { files.push(item.path); });

if (!files.length)
    console.log("Directory contains no java files");

Тем не менее, я попал в нижнюю часть if перед фильтромФункция завершена.Я в растерянности относительно того, как исправить это.

1 Ответ

0 голосов
/ 19 октября 2018

Предполагается, что ваш код правильно работает внутри функции async.Вы можете сделать следующее

// this code should be inside async function to use await keyword
const run = async () => {
  const files: string[] = await new Promise<string[]>((resolve, reject) => {
    const files: string[] = [];
    klaw(myDir, {
      filter: (item: any) => {
        return path.extname(item.path) === ".java";
      }
    })
      .on("data", item => {
        files.push(item.path);
      })
      .on("end", () => resolve(files))
      .on("error", reject);
  });

  if (!files.length) console.log("Directory contains no java files");
};

или использовать пакет, который сделает это за вас.Например, поток-обещание

Playground Link

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...