当前位置: 首页 > 知识库问答 >
问题:

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

章学义
2023-03-14

我需要将经过大量异步请求后形成的最终对象写入一个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个答案

戚俊健
2023-03-14

如果您的JSON是正确的,那么它将把数据输入到该对象中,但正如您所说的,请求是异步的。您将需要添加代码,以便在所有请求完成并且对象准备好编写时进行监视。然后,只需使用JSON.stringify()将Javascript对象写入JSON。

江恩
2023-03-14

注意,应该是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函数,它简化了写入文件的过程。

 类似资料:
  • 问题内容: 我想用XML内容类型编写请求的正文,但是我不知道如何使用HttpClient对象(http://hc.apache.org/httpclient-3.x/apidocs/index.html) 而且我不知道如何继续用我的XML编写正文… 问题答案: 如果您的xml是由您编写的,则只能以这种方式使用 注意例外。 顺便说一句,该示例是由httpclient版本4.x编写的

  • 问题内容: 我有一个ajax问题: 如果循环6次(在我的foreach循环中),我应该对服务器发出6个异步请求。但是在这种情况下,ajax调用是同步调用的,而不是异步调用的。有人知道为什么会这样吗? 问题答案: 好,谢谢。经过几个小时的分析和反思,我意识到了为什么该脚本会同步运行:我打开script.php文件,并注意到了这一点以及该文件的开头: 因此,我对使用会话的php脚本进行了并行ajax调

  • 问题内容: 所以我有以下代码循环遍历一个对象: 对于每个迭代,我要发出一个请求(发送一条Facebook消息),仅在该请求完成后,我才要进行下一个迭代,这是因为没有任何回调,消息将不会正确地连续发送。 我以前曾遇到过这个问题,但无法解决,我该怎么做? 如果您有任何问题,请询问。谢谢。 问题答案: 我最终遵循了@Matt Diamond的建议,并执行了如下所示的递归函数: 谢谢大家的帮助,不胜感激。

  • 问题内容: 同步请求和异步请求之间的性能(速度方面)是否有差异? 使用异步请求的所有原因是什么? 问题答案: 您应该始终使用异步Ajax请求,实际上,我只知道应该使用同步Ajax请求的一个地方,即您是否在Ajax请求中,将新的JavaScript文件嵌入客户端,然后引用类型和/或原始Ajax请求返回的JavaScript文件中的对象。然后,应该(或可以理智地)通过使用同步Ajax请求包括对这个新J

  • 问题内容: 当我使用of方法时,和之间有什么区别? 问题答案: Mozilla开发人员:同步和异步请求 支持同步和异步通信。但是,一般而言,出于性能方面的考虑,异步请求应比同步请求优先。 简而言之,同步请求会阻止代码执行,并可能泄漏内存和事件。这可能会导致严重的问题。使用同步请求的唯一可行理由是更轻松地促进其中的下载。

  • 异步文件读写 读文件 use AsyncFile; $content = (yield AsyncFile::read(__ROOT__."runtime/test.txt")); 写文件 $res = (yield AsyncFile::write(__ROOT__."runtime/test.txt", "hello wordls!")); $res = (yi