2017-07-19 1 views
0

J'essaye de lire d'un dossier dans le noeud. Voici mon code:Pourquoi ma fonction readFileSync n'est-elle pas en cours d'exécution?

const cheerio = require('cheerio'); 

var fs = require('fs'); 
var path = process.argv[2]; 

var glossArr = [] 

fs.readFileSync(path, {encoding: "utf8"}, function (err, markup){ 
    console.log('function executing') 
    if (err) throw err; 
    const $ = cheerio.load(markup); 
    var glossar = $('body').children().last(); 
    var index = $('body').children().last().prev(); 


    glossar.children().children().children().each(function(i, elem) { 
    var obj = {}; 
     var container = $(this).children(); 

    var unter = container.children(); 
    var begriff = unter.first().text(); 
    var text = unter.last().text(); 
    obj[begriff] = text; 
    obj['file'] = path; 
    glossArr.push(obj) 
    });  

}); 

console.log('done reading file...') 

var glossString = JSON.stringify(glossArr) 
var result = 'export default ' + glossString 

fs.writeFileSync('./data/data.js', result) 

Pour une raison quelconque, l'readFileSync n'exécute pas du tout. La seule chose qui est enregistrée est 'fait de lire le fichier ...'

Cependant, quand je l'ai changé à readFile() (au lieu de la synchronisation), la fonction s'exécute et fonctionne comme prévu. Qu'est-ce que je rate?

Répondre

4

readFileSync n'accepte pas de paramètre de rappel car il est synchrone. Vous devez changer votre code pour déplacer le code à partir de la fonction de rappel au-dessous de la fonction synchrone:

var markup = fs.readFileSync(path, {encoding: "utf8"}); 
const $ = cheerio.load(markup); 
// ... 

Pour clarifier les choses, le readFileSyncest en cours d'exécution, il est juste que vous ne faites rien avec le résultat et votre paramètre de rappel est ignoré.

+0

Un avis: Vous semblez maîtriser le code asynchrone et les rappels, ce qui est la méthode de programmation encouragée dans le nœud. Vous voudrez peut-être coller avec cela au lieu de changer la méthode pour synchrone – CodingIntrigue

+1

Dans ce cas particulier, ce n'est vraiment pas nécessaire, mais je le ferais habituellement –

+0

Bien sûr, merci d'avoir attrapé cela! –

0

fs.readFileSync Version synchrone de fs.readFile(). Renvoie le contenu du chemin Une fois le contenu renvoyé, vous pouvez effectuer la tâche que vous souhaitez effectuer. Pour plus de compréhension, utilisez le lien suivant readFileSync