我需要将大量异步请求后形成的最终对象写入JSON文件。
这是我的文件的布局
var finalObj = {}; for(i=0;i<100;i++){ request.get("http://example.com/get/" +i,function(err,res,body){ var tObj = json.parse(body); finalObj[tObj.name] = tObj.value; }) }
收到所有响应对象后,我想将finalObj保存到json文件中。我该怎么做?
答案 0 :(得分:0)
如果您的JSON正确,那将会将数据导入该对象,但正如您所说,请求是异步的。您需要添加代码以监视何时完成所有请求并准备好写入对象。然后,使用JSON.stringify()将Javascript对象写入JSON。
答案 1 :(得分:0)
每次收到请求时,如何添加计数器以递增?当计数器与请求总数匹配时,是时候写了。
var finalObj = {},
requestCount = 100,
ticks = 0;
for(i=0; i<requestCount; i++){
request.get("http://example.com/get/" + i, function (err,res,body) {
var tObj = json.parse(body);
finalObj[tObj.name] = tObj.value;
ticks++;
// check if all 100 have been received
if (ticks == requestCount) {
// write file
}
})
}
答案 2 :(得分:0)
请注意,正确解析正文应该是JSON.parse(body)
。
最简单的方法是使用一个在完成后递增的计数器,并检测你是否处理了所有请求;
var finalObj = {};
var counter = 0;
for(i=0;i<100;i++){
request.get("http://example.com/get/" +i,function(err,res,body){
var tObj = JSON.parse(body);
finalObj[tObj.name] = tObj.value;
if (++counter === i) {
require('fs').writeFile('foo.txt', JSON.stringify(finalObj), function (err) {
if (!err) {
// celebrate
}
});
}
});
}
有关文件写入方面的详细信息,请参阅File System module;幸运的是,他们有一个writeFile
function,可以简化写入文件的过程。