问题
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