Nodejs从数据读取文件并创build对象

我正在尝试编写一个nodejs程序。 我有一个文件data.json,它包含json对象。 对于每个对象,我必须添加另一个键作为审查,值作为文本文件的数据。 在这里,我写了从json文件中读取数据的代码,在那个文件中,我为每个对象插入了key和value对。 并存储在一个名为“问题”的数组中,在下面的代码中,我使用callback将数据发布到调用函数。 但在Fetchdata函数中的“for循环”之前执行callback。 如何在循环之后调用callback。

var fs = require('fs'); var jf = require('jsonfile') var file = '../data/data.json' function readfile(str,callback) { fs.readFile(str, function (err, data) { callback && callback(data.toString()); }); } function Fetchdata(callback) { var matter = []; jf.readFile(file, function (err, jsonData) { var j=0; for (var i = 0; i < jsonData.length; ++i) { obj = jsonData[i]; var purchase_url = obj["purchase_url"]; if (purchase_url.indexOf("flipkart") > -1) { var ss = purchase_url.split("pid="); if (ss[1]) { var s2 = ss[1].split('&'); readfile(s2[0],function(some){ "use strict"; obj["review"]= some; matter.push(obj); }) } } } callback && callback(matter); }); } Fetchdata(function (some) { console.log(some[0]); }); 

您可以使用同步版本的readFile

 function readfile(filename,callback) { callback(fs.readFileSync(filename).toString()) } 

readFile的同步版本将不会继续到下一行。 它会返回文件的内容。

你也可以用fs.readFileSync(str,'utf-8')来代替使用toString。


更多信息

  • readFileSync API
  • 与Node.js同步与asynchronous代码