为什么我的readFileSync函数没有执行?

Dav*_* J. 0 javascript node.js cheerio

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

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)
Run Code Online (Sandbox Code Playgroud)

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

但是,当我将其更改为readFile()(而不是同步)时,该函数将按预期执行并运行。我想念什么?

Cod*_*gue 5

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

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

要澄清的readFileSync 是,正在执行,只是您对结果不做任何事情,并且您的回调参数也被忽略了。