How to read the content of files synchronously in Node.js?

alexchenco picture alexchenco · Dec 7, 2015 · Viewed 34.8k times · Source

This is what I have:

#! /usr/bin/env node

var fs = require('fs'),
    files = fs.readdirSync(__dirname + '/files/'),

files.forEach(function(file) {
  fs.readFile(__dirname + '/files/' + file, 'utf8', function (error, data) {
    console.log(data)
  })
})

Even though I'm using readdirSync the output is still asynchronous:

alex@alex-K43U:~/node/readFiles$ node index.js 
foo 1

foo 3

foo 2

How to modify the code so the output becomes synchronous?

alex@alex-K43U:~/node/readFiles$ node index.js 
foo 1

foo 2

foo 3

Answer

Gazler picture Gazler · Dec 7, 2015

You need to use readFileSync, your method is still reading the files asynchronously, which can result in printing the contents out of order depending on when the callback happens for each read.

var fs = require('fs'),
    files = fs.readdirSync(__dirname + '/files/');

files.forEach(function(file) {
  var contents = fs.readFileSync(__dirname + '/files/' + file, 'utf8');
  console.log(contents);
})