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

此生再无相见时 提交于 2019-12-09 08:27:17

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!