Вам в комментарии все верно написали. После запуска функции чтения папки у Вас все происходит асинхронно, поэтому, читая переменную 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: после того, как Ваш код начал работать асинхронно - Вам нужно делать асинхронно все, что зависит от асинхронного кода.