web-dev-qa-db-fra.com

Comment lire le contenu des fichiers de manière synchrone dans Node.js?

Voici ce que j'ai:

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

Même si j'utilise readdirSync la sortie est toujours asynchrone:

alex@alex-K43U:~/node/readFiles$ node index.js 
foo 1

foo 3

foo 2

Comment modifier le code pour que la sortie devienne synchrone?

alex@alex-K43U:~/node/readFiles$ node index.js 
foo 1

foo 2

foo 3
15
alexchenco

Vous devez utiliser readFileSync, votre méthode lit toujours les fichiers de façon asynchrone, ce qui peut entraîner l'impression du contenu en désordre selon le moment où le rappel se produit pour chaque lecture.

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

C'est parce que vous lisez le fichier de manière asynchrone. Essayer:

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

Documentation NodeJS pour 'fs.readFileSync ()'

6
Peter Paul Kiefer

Avez-vous vu readFileSync ? Je pense que cela pourrait être votre nouvel ami.

2
Daniel A. White