これは私が持っているものです:
#! /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)
})
})
readdirSync
を使用していますが、出力はまだ非同期です:
alex@alex-K43U:~/node/readFiles$ node index.js
foo 1
foo 3
foo 2
出力が同期になるようにコードを変更する方法は?
alex@alex-K43U:~/node/readFiles$ node index.js
foo 1
foo 2
foo 3
readFileSync
を使用する必要があります。メソッドはファイルを非同期に読み取ります。そのため、読み取りごとにコールバックが発生するタイミングに応じて、コンテンツが順不同で印刷される可能性があります。
var fs = require('fs'),
files = fs.readdirSync(__dirname + '/files/');
files.forEach(function(file) {
var contents = fs.readFileSync(__dirname + '/files/' + file, 'utf8');
console.log(contents);
})
これは、ファイルを非同期で読み取るためです。試してください:
#! /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);
});
readFileSync
を見ましたか?それはあなたの新しい友達かもしれないと思います。