【问题标题】:Node.js Iterate CSV File for Requests, but Wait for Response Before Continuing the IterationsNode.js 为请求迭代 CSV 文件,但在继续迭代之前等待响应
【发布时间】:2017-05-19 12:57:54
【问题描述】:

我有一些类似这样的代码(对于本次讨论进行了一些简化)

var inputFile='inputfile.csv';
var parser = parse({delimiter: ','}, function (err, data) {
    async.eachSeries(data, function (line, callback) {
            SERVER.Request(line[0], line[1]);
            SERVER.on("RequestResponse", function(response) {
                    console.log(response);
            });
            callback();
    });
});

SERVER.start()

SERVER.on("ready", function() {
    fs.createReadStream(inputFile).pipe(parser);
});

我想要做的是通过命令行节点程序运行 CSV 文件,该程序将遍历每一行,然后向服务器发出请求,该服务器以事件 RequestResponse 进行响应,然后我记录响应。 RequestResponse 需要一秒钟的时间,而我现在设置代码的方式只是飞过 CSV 文件,每次迭代我都会得到一个输出,但它主要是我期望的第一次迭代的输出,有一点第二次迭代的输出。我需要知道如何让迭代等到出现 RequestResponse 事件后再继续下一次迭代。这可能吗?

我在很大程度上基于此代码 NodeJs reading csv file

但我对 Node.js 和 async.foreach 有点迷茫。任何帮助将不胜感激

【问题讨论】:

  • 如果您可以使用 Promises 和具有 asyncawait 关键字的 Node 7,您的工作将变得容易得多。然后,您可以像以前一样简单地使用传统的for 循环。 blog.risingstack.com/async-await-node-js-7-nightly
  • 这是fedora box上的所有命令行,所以我可能可以使用任何东西,我会看看

标签: node.js csv async.js


【解决方案1】:

解决方案很简单。您需要在服务器返回后调用“回调”。

async.eachSeries(data, function (line, callback) {
        SERVER.Request(line[0], line[1]);
        SERVER.on("RequestResponse", function(response) {
                console.log(response);
                SERVER.removeAllListeners("RequestResponse", callback)
        });

})

发生的情况是 eachSeries 在您因特定呼叫失败后期待回调。

【讨论】:

  • 我非常确定我也在事件响应函数中放置了回调,但我会再次检查它,谢谢
  • 我实际上按照您的建议做了,代码在第二个请求上挂起,只是超时或吐出 if (fn === null) throw new Error("Callback was already called." );
  • 那么server.on调用有问题,是http库之类的请求吗? github.com/request/request。回调肯定应该在那个地方,但也许 RequestResponse 不是你所需要的。你能用确切的非简化代码编辑问题吗?错误消息表明 .on 被多次调用,例如,客户端可能接收到数据块
  • 好吧,csv 大约有 100 行长,我在每一行上运行请求,需要获取每个请求的事件,然后再开始下一个请求,然后等待它的事件响应接下来以此类推。我猜你的意思是我应该找到另一种方式?身份证。
  • 这也不是典型的请求,它是通过事件响应调用 Steam 游戏协调员
【解决方案2】:

我建议你咬紧牙关,花时间学习承诺和async/await。然后,您可以使用常规 for 循环并等待 Web 响应承诺。

【讨论】:

    猜你喜欢
    • 2020-04-08
    • 2014-07-12
    • 1970-01-01
    • 2019-04-23
    • 2020-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-17
    相关资源
    最近更新 更多