NodeJs中节点异步函数的复活
Resurrection in node async function 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 调用上面的函数时,它不会等待自己完成。
在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
编辑。
我正在尝试使用 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 调用上面的函数时,它不会等待自己完成。
在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
编辑。