我需要将经过大量异步请求后形成的最终对象写入一个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文件中。我该怎么做?
注意,应该是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
}
});
}
});
}
关于东西的文件写入端的细节,请参见文件系统模块;谢天谢地,他们有一个writeFile
函数,它简化了写入文件的过程。
如果您的JSON是正确的,那么它将把数据输入到该对象中,但正如您所说的,请求是异步的。您将需要添加代码,以便在所有请求完成并且对象准备好编写时进行监视。然后,只需使用JSON.stringify()将Javascript对象写入JSON。