#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
изменен.