提问者:小点点

在大量异步请求后编写JSON文件


我需要将经过大量异步请求后形成的最终对象写入一个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文件中。我该怎么做?


共2个答案

匿名用户

注意,应该是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。

相关问题