web-dev-qa-db-ja.com

Node.jsでファイルのコンテンツを同期的に読み取る方法

これは私が持っているものです:

#! /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
15
alexchenco

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

これは、ファイルを非同期で読み取るためです。試してください:

#! /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);
});

'fs.readFileSync()'のNodeJSドキュメント

6

readFileSync を見ましたか?それはあなたの新しい友達かもしれないと思います。

2
Daniel A. White