问题
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
回答1:
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);
})
回答2:
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()'
回答3:
Have you seen readFileSync? I think that could be your new friend.
来源:https://stackoverflow.com/questions/34135302/how-to-read-the-content-of-files-synchronously-in-node-js