为什么我的 readFileSync 函数没有执行?
Why isn't my readFileSync function executing?
我正在尝试从 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 根本没有执行。唯一记录的是 'done reading file...'
但是,当我将其更改为 readFile()
(而不是同步)时,函数会按预期执行和工作。我错过了什么?
readFileSync
不接受回调参数,因为它是同步的。您需要更改代码以将代码从回调内移至同步函数下方:
var markup = fs.readFileSync(path, {encoding: "utf8"});
const $ = cheerio.load(markup);
// ...
澄清一下,正在执行 readFileSync
,只是您没有对结果做任何事情,您的回调参数被忽略了。
fs.readFileSync fs.readFile() 的同步版本。 Returns路径内容
返回内容后,您可以执行您想要执行的任务。
为了更好地理解,请使用以下 link readFileSync
我正在尝试从 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 根本没有执行。唯一记录的是 'done reading file...'
但是,当我将其更改为 readFile()
(而不是同步)时,函数会按预期执行和工作。我错过了什么?
readFileSync
不接受回调参数,因为它是同步的。您需要更改代码以将代码从回调内移至同步函数下方:
var markup = fs.readFileSync(path, {encoding: "utf8"});
const $ = cheerio.load(markup);
// ...
澄清一下,正在执行 readFileSync
,只是您没有对结果做任何事情,您的回调参数被忽略了。
fs.readFileSync fs.readFile() 的同步版本。 Returns路径内容 返回内容后,您可以执行您想要执行的任务。 为了更好地理解,请使用以下 link readFileSync