如何解决在节点异步函数 NodeJs 中复活
我正在尝试使用 nodejs 通过 sftp 远程删除文件。
我的功能是这样的
function dropdir(path){
sftp.readdir(path,async(err,files)=>{
if(err) console.log(err);//{ callback(err); return err;}
if(!files.length){
await sftp.rmdir(path)
}else {
for (let i = 0; i < files.length; i++) {
sfile= files[i];
if(sfile.attrs.size == 4096){
await dropdir(path+"/"+ sfile.filename); //recalling function with await
console.log(path); //console.log of current working path
}else{
file_path= path+"/"+ sfile.filename;
await sftp.unlink(file_path)
}
}
await sftp.rmdir(path)
}
});
当我用 await 调用上述函数时,它不会等待 self 完成。
在 console.log 中我得到
/home/ubuntu/hiiii
/home/ubuntu/hiiii/Links
/home/ubuntu/hiiii/Links/Links
/home/ubuntu/hiiii/Links/Links/Links
这意味着 dropdir 没有等待最后一个孩子完成
简单来说,这个函数是在目录方向上向前移动(父到子),而不是反向(子到父)
解决方法
尝试将该函数声明为 async
。
此外,对于 sftp.readdir
,将该回调样式函数转换为带有 util.promisify
的 promisifed
函数。
- 等待
promisifedReadDir
将结果分配给const files
以及回调中的哪些代码现在可以处于同一级别并await
启用。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。