@Denisca2828

Как исправить проблему с fs.readdir()?

Цель такая: надо получить папки и файлы в папке, например test_dir, и если там есть папка с именем dir1 то изменить переменную ok на true:
var ok = false;
fs.readdir("./test_dir", function(err, data){
    if(err){ throw err };
    for(i in data){
        if(data[i] == "dir1"){
            ok = true;
        }
    }
}

Проблема: переменная ok остается неизменной
Заранее спасибо!
  • Вопрос задан
  • 245 просмотров
Пригласить эксперта
Ответы на вопрос 1
dimovich85
@dimovich85
https://u-academy.net/
Вам в комментарии все верно написали. После запуска функции чтения папки у Вас все происходит асинхронно, поэтому, читая переменную ok сразу после запуска чтения папки Вы получаете false, а вот когда сработает колбек - тогда будет true. Эту логику Вам надо полностью перевести в асинхронный режим. Чтение папки можно обернуть в Promise, а объявление переменной и чтение ее значения обернуть асинхронной функцией.
const readdir = path => (
      new Promise( (resolve, reject) => {
         fs.readdir( path, (err, data) => err ? reject(err) : resolve(data) );
      });
);

(async ()=>{
  let ok = false;
  try{
    let data = await readdir('./test_dir');
    ok = data.includes('dir1');
    console.log(ok);
  } catch(e){
    console.log(e);
  }
})();

PS: после того, как Ваш код начал работать асинхронно - Вам нужно делать асинхронно все, что зависит от асинхронного кода.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы