node.js - 如何将 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");
};
或者使用一些为你做的包。例如流到承诺
推荐阅读
- c# - WaitOne 什么时候执行非框架代码?
- android - Oreo:startService() 在后台调用时不会抛出 IllegalStateException
- javascript - 选项标签中的动态选项在JavaScript中使用带有html标签的'For循环'?
- c++ - 在 C++ 中,创建“n”个对象的推荐方法是什么,其中 n 是用户定义的。我怎样才能做到这一点?
- r - 如何在 bookdown::gitbook 中使用自定义 pandoc HTML 模板
- html - 图像不在页面中间水平居中
- firebase - 火力基地 | 使用 Firebase 控制台以 CSV 格式导出收集数据
- javascript - 我应该如何解析 Cheerio 中的复杂元素
- javascript - JS/PHP:在 Outlook 中撰写电子邮件并添加附件
- google-cloud-platform - 谷歌计算引擎,附加磁盘不工作