Javascript async for循环导致函数以静默方式终止
您好,我正在尝试了解以下代码中发生了什么:Javascript async for循环导致函数以静默方式终止,javascript,node.js,Javascript,Node.js,您好,我正在尝试了解以下代码中发生了什么: 从“fs”导入fs; 从“util”导入util; 从“split2”导入split2; 异步函数main(){ const files=wait fs.promises.readdir(“…”); for(文件常数){ 常量s=fs.createReadStream(“../”+f); 常数ss=s.pipe(split2()); s、 on(“错误”,(错误)=>{ 控制台日志(err); }); 等待(ss的常数l){ } 控制台日志(f);
从“fs”导入fs;
从“util”导入util;
从“split2”导入split2;
异步函数main(){
const files=wait fs.promises.readdir(“…”);
for(文件常数){
常量s=fs.createReadStream(“../”+f);
常数ss=s.pipe(split2());
s、 on(“错误”,(错误)=>{
控制台日志(err);
});
等待(ss的常数l){
}
控制台日志(f);
}
控制台日志(“返回”);
返回“完成”;
}
main()代码>您没有在for await(const l of ss){…}
循环中处理错误。当您尝试在目录上运行此操作时,您的for await
循环将拒绝,并且由于您没有捕获或处理该拒绝,containingasync
函数也将拒绝,程序将停止
您可以尝试在wait
循环的周围放置一个try/catch,看看是否有效。但是,我在wait
流的特性中发现了许多bug,甚至提交了一些bug。如果打开文件时出错或读取文件时出错,则会出现错误,因此此功能只是个错误,出于这个原因,我决定不在代码中使用它
另外,请注意,由于无法从嵌套的事件处理程序中拒绝async
函数,因此您没有一种很好的方法从error
事件返回错误。总的来说,流及其事件与基于承诺的编程不能很好地结合。有一些方法可以提示一些流事件,但要使流与承诺一起工作,这是一项正在进行的工作。此文件夹中是否也有目录?例如,一个node\u modules
目录?@ChrisG yes,事实上它显示在第二个runYes中,我试图捕捉错误,但实际上它不起作用;事实上,我在考虑实现中的一些bug,但我希望这只是我的错:-)你能指出你提出的一些bug吗?感谢you@FulvioD安东尼奥-这里有一个:谢谢你,我想我也会避免使用这个功能,即使它看起来很方便…@FulvioD'Antonio-这里有另一个相关的bug(我没有存档):。好的,现在我对正在发生的事情有了更好的了解…谢谢