Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何将klaw与async/await结合使用?_Node.js_Async Await - Fatal编程技术网

Node.js 如何将klaw与async/await结合使用?

Node.js 如何将klaw与async/await结合使用?,node.js,async-await,Node.js,Async Await,我试图递归地获取目录中所有Java文件的列表。我正在尝试使用,但似乎无法使其与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.len

我试图递归地获取目录中所有Java文件的列表。我正在尝试使用,但似乎无法使其与
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");

然而,在filter函数完成之前,我已经找到了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");
};
//此代码应该在异步函数中,以便使用wait关键字
const run=async()=>{
常量文件:字符串[]=等待新承诺((解析、拒绝)=>{
常量文件:字符串[]=[];
klaw(myDir{
过滤器:(项目:任意)=>{
返回path.extname(item.path)=“.java”;
}
})
.on(“数据”,项目=>{
文件.push(item.path);
})
.on(“结束”,()=>解析(文件))
.on(“错误”,拒绝);
});
如果(!files.length)console.log(“目录不包含java文件”);
};
或者使用一些为你做这件事的软件包。比如说


async/await
使用承诺(表对象),而
klaw
创建流。您需要创建一个在流结束时解决的承诺。我确信在npm.Turabanko的某个地方有这样一个包——它不起作用,tslint告诉我promise将是{}类型而不是字符串[]。@JohnBergqvist我对typescript非常熟悉。如果忽略该错误,您将看到代码正在工作。否,该错误导致代码无法编译。。。。[ts]类型“{}”不能分配给类型“string[]”。类型“{}”中缺少属性“length”。@JohnBergqvist是否尝试将类型声明添加到内部
文件和promise实例中。Tarabakno?这样地?异步函数validateDir(dir:string){const files:string[]=new Promise((解析,拒绝)=>{const srcFiles:string[]=[];klaw(dir,{filter:(item:any)=>{return path.extname(item.path)====“.java”}。).on(“数据”,“项”=>{srcFiles.push(item.path);}.on.“结束”,“解析(srcFiles)).on”(“错误”,()=>拒绝();});返回文件;}它仍然在抱怨同样的问题。。。