我正在尝试编写nodejs程序。我有一个文件data.json,它包含json对象。对于每个对象,我必须添加另一个键作为review,value作为文本文件数据。在这里,我编写了用于从json文件中读取数据的代码,在该文件中,为我插入键和值对的每个对象。并存储在一个名为' matter'的数组中,在下面的代码中,我使用回调将数据发布到调用函数。但回调正在执行之前'#循环'在Fetchdata函数中。如何在for循环后调用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]);
});
答案 0 :(得分:2)
您可以使用readFile的同步版本
function readfile(filename,callback) {
callback(fs.readFileSync(filename).toString())
}
readFile的同步版本不会继续到下一行。它将返回文件的内容。
您也可以在一行fs.readFileSync(str,'utf-8')
而不是使用toString执行此操作。