代码之家  ›  专栏  ›  技术社区  ›  David J.

为什么我的readFileSync函数没有执行?[副本]

  •  2
  • David J.  · 技术社区  · 9 年前

    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)
    

    然而,当我把它改为 readFile() (而不是同步),该函数按预期执行和工作。我错过了什么?

    2 回复  |  直到 9 年前
        1
  •  10
  •   CodingIntrigue    9 年前

    readFileSync 不接受回调参数,因为它是同步的。您需要更改代码,以将代码从回调内移到同步函数下:

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

    澄清一下 readFileSync 在执行时,只是您没有对结果执行任何操作,并且您的回调参数被忽略。

        2
  •  0
  •   RaM PrabU    9 年前

    的同步版本 fs.readFile() 要了解更多信息,请使用以下链接 readFileSync