0

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

4

3 回答 3

0

如果您的 JSON 是正确的,那么这会将数据放入该对象,但正如您所说,请求是异步的。您将需要添加代码来监控所有请求何时完成并且对象已准备好写入。然后,只需使用 JSON.stringify() 将 Javascript 对象写入 JSON。

于 2012-09-22T18:53:57.073 回答
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
    }
  })
}
于 2012-09-22T18:58:12.833 回答
0

注意应该是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
            }
        }); 
    }
  });
}

有关文件写入方面的详细信息,请参见文件系统模块;值得庆幸的是,他们有一个writeFile功能可以简化写入文件的过程。

于 2012-09-22T18:59:38.743 回答