【问题标题】:Why isn't my readFileSync function executing? [duplicate]为什么我的 readFileSync 函数没有执行? [复制]
【发布时间】:2017-07-19 12:53:15
【问题描述】:

我正在尝试从 Node.js 中的文件中读取数据。这是我的代码:

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)

由于某种原因,readFileSync 根本不执行。唯一记录的是“完成读取文件...”

但是,当我将其更改为 readFile()(而不是同步)时,该函数会按预期执行和工作。我错过了什么?

【问题讨论】:

    标签: javascript node.js cheerio


    【解决方案1】:

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

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

    为了澄清,readFileSync 正在被执行,只是你没有对结果做任何事情,你的回调参数被忽略了。

    【讨论】:

    • 一个意见:你似乎掌握了异步代码和回调,这是在 Node.js 中被鼓励的编程方法。您可能只想坚持使用它而不是将方法更改为同步
    • 在这种特殊情况下,确实不需要,但我通常会
    • 当然,感谢您的关注!
    【解决方案2】:

    fs.readFileSync fs.readFile() 的同步版本。返回路径的内容 返回内容后,您可以执行您想要执行的任务。 如需更多了解,请使用以下链接readFileSync

    【讨论】:

      猜你喜欢
      • 2014-08-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-06
      • 2012-11-16
      • 2021-05-10
      • 1970-01-01
      相关资源
      最近更新 更多