Воскрешение в асинхронной функции узла NodeJS

#node.js #asynchronous #async-await #sftp

Вопрос:

Я пытаюсь создать функцию для удаленного удаления файлов по sftp с помощью nodejs.

моя функция такова

 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)
                    }
                });
 

когда я вызываю вышеуказанную функцию обратно в том же режиме с ожиданием, она не ждет завершения.

в консоли.журнал, который я получаю

 /home/ubuntu/hiiii
/home/ubuntu/hiiii/Links
/home/ubuntu/hiiii/Links/Links
/home/ubuntu/hiiii/Links/Links/Links 
 

это означает, что dropdir не был полностью завершен для последнего ребенка

проще говоря, эта функция движется вперед(от родителя к потомку) в направлении каталога вместо обратного слова (от потомка к родителю).

Ответ №1:

Попробуйте объявить функцию как async .

Кроме того, для sftp.readdir преобразования этой функции стиля обратного promisifed вызова в функцию с util.promisify .

  • ожидание promisifedReadDir присвоения результатов const files

и какой код, который был в обратном вызове, теперь может быть на том же уровне и await изменен.