2017-07-19 154 views
0

我正尝试从Node中的文件中读取数据。这里是我的代码:为什么我的readFileSync函数不能执行?

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()(而不是同步)时,该函数按预期执行并正常工作。我错过了什么?

回答

4

readFileSync不接受回调参数,因为它是同步的。你需要改变你的代码,该代码从回调中移动的同步功能之下:

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

为了澄清,该readFileSync被执行,它只是你没有做任何事情,结果并且您的回调参数被忽略。

+0

意见:您似乎掌握了异步代码和回调,这是在Node中编程的鼓励方法。你可能只想坚持,而不是改变方法到同步 – CodingIntrigue

+1

在这种特殊情况下,这是真的不需要,但我通常会 –

+0

当然,感谢您捕捉! –

0

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

相关问题