简体   繁体   中英

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

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

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);
})

That's because you read the file asynchronously. Try:

#! /usr/bin/env node

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

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

NodeJS Documentation for 'fs.readFileSync()'

Have you seen readFileSync ? I think that could be your new friend.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM