javascript - Node.js 逐行异步操作

标签 javascript node.js asynchronous

我正在尝试逐行读取流,并为每一行执行一些异步处理。我遇到的问题是如何确定所有线路的操作何时完成。我以为我可以使用 readline“close”事件,但这似乎是在我在“line”事件上启动的异步操作完成之前很久就触发的。

这是有问题的事件处理程序:

logReader.on("line", inputLine => {
    self._processLogLine(inputLine, () => {
        if (self.streamFinished) {
            completionCallback(err);
        }
    });
});

logReader.on("close", () => {
    self.streamFinished = true;
});

当流上的所有行处理完成时,应调用completionCallback 方法。

我考虑过为开始/完成的线路操作添加计数器,并在它们匹配时调用completionCallback,但这看起来很尴尬。

最佳答案

这是一种方法,您可以基本上跟踪每行的成功情况。我没有足够的代码来测试它...

const lineProcessing = [];

const doCompletion = () => {
  if (self.streamFinished && !lineProcessing.includes(false)) {
    // Not sure where 'err' comes from
    completionCallback(err);
  }
}

logReader.on("line", inputLine => {
  lineProcessing.push(false);
  let processingIndex = lineProcessing.length - 1;
  self._processLogLine(inputLine, () => {
    lineProcessing[processingIndex] = true;
    doCompletion();
  });
});

logReader.on("close", () => {
  self.streamFinished = true;
});

关于javascript - Node.js 逐行异步操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46981206/

相关文章:

javascript - 正确使用 Vue Watch

javascript - 如何在 PHP 中实现推送通知

python - 如何在Python中异步记录stdout/stderr?

javascript - 从单个上 Node 连接的两端公开的远程接口(interface)

javascript - 从鼠标位置获取 map 经纬度

node.js - Promise 返回 undefined variable

node.js - Websocket 后端客户端连接在一段时间后停止接收流更新

mysql - 重置 MySQL 自动增量作为 Node.js 单元测试中的拆卸步骤

javascript - 为什么我会看到重复的 JavaScript 异步响应?

node.js - 第一次失败后如何停止 async.queue?