skip to Main Content
const testFolder = '../assets';
const fs = require('fs');

const array=[]
const pattern=/gif/
fs.readdir(testFolder, (err, files) => {
  files.map(file => {
    if(file.search(pattern)>0)
        array.push(file)
  });
// console.log(files)
});
console.log(array)

It should be printing an array of all the files containing .gif extension .But it is printing an empty array .Not sure why the heck this is happening …

2

Answers


  1. The console.log(array) call will happen before the array is actually populated, since the callback will take a little time to be called.

    If you place the log statement within the callback, you’ll get the list of files as expected.

    I’d also suggest using Array.filter over Array.map in this case.

    const testFolder = '../assets';
    const fs = require('fs');
    
    const pattern = /.gif$/i
    fs.readdir(testFolder, (err, files) => {
        const array = files.filter(file => pattern.test(file))
        console.log(array)
    });
    

    You could also use fs.readdirSync if you wish to use a synchronous version of readdir.

    const testFolder = '../assets';
    const fs = require('fs');
    
    const pattern = /.gif$/i
    const allFiles = fs.readdirSync(testFolder)
    const gifFiles = allFiles.filter(file => pattern.test(file))
    console.log(gifFiles)
    
    Login or Signup to reply.
  2. It’s because fs.readdir is async, you’ve to put the console log in the callback or use an await statement !

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search