我正在尝试逐行读取流,并为每一行执行一些异步处理。我遇到的问题是如何确定所有线路的操作何时完成。我以为我可以使用 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/