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.promisifypromisifed 函数。

  • 等待 promisifedReadDir 将结果分配给 const files

回调中的代码现在可以处于同一级别并await编辑。