【发布时间】:2012-09-14 19:59:27
【问题描述】:
我需要将大量异步请求后形成的最终对象写入 JSON 文件。
这是我的文件布局
var finalObj = {}; for(i=0;i收到所有响应对象后,我想将 finalObj 保存到 json 文件中。我该怎么做?
【问题讨论】:
标签: javascript node.js request
我需要将大量异步请求后形成的最终对象写入 JSON 文件。
这是我的文件布局
var finalObj = {}; for(i=0;i收到所有响应对象后,我想将 finalObj 保存到 json 文件中。我该怎么做?
【问题讨论】:
标签: javascript node.js request
如果您的 JSON 是正确的,那么这会将数据放入该对象,但正如您所说,请求是异步的。您将需要添加代码来监控所有请求何时完成并且对象已准备好写入。然后,只需使用 JSON.stringify() 将 Javascript 对象写入 JSON。
【讨论】:
每次收到请求时添加一个计数器来增加如何?当计数器与请求总数匹配时,就该写入了。
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
}
})
}
【讨论】:
注意应该是JSON.parse(body)才能正确解析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,它简化了写入文件的过程。
【讨论】: