如何将 klaw 与 async/await 一起使用?



我正在尝试递归获取目录中所有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 语句。我不知道如何纠正它。

假设您的代码在函数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");
};

或者使用一些为您完成的软件包。例如,流到承诺

游乐场链接

最新更新