我正在尝试编写一个nodejs程序。我有一个文件 data.json ,它包含 json 对象。对于每个对象,我必须添加另一个键作为审查,值作为文本文件数据。在这里,我编写了从 json 文件读取数据的代码,在该文件中,对于我插入的键和值对的每个对象。并存储在名为“matter”的数组中,在下面的代码中,我使用回调将数据发送到调用函数。但回调是在 Fetchdata 函数中的“for 循环”之前执行的。如何在for循环后调用回调。
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。
更多信息
关于node.js - Nodejs从数据中读取文件并创建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37542303/