0 javascript events node.js eventstoredb
当我有以下配置时,程序运行良好:
let events = eventstoreClient.readStream(
streamName,
{
fromRevision: END,
direction: BACKWARDS,
maxCount: 20
}
);
Run Code Online (Sandbox Code Playgroud)
但是,当 maxCount 设置为 100 或 1000 或未提供 maxCount 选项时,程序会卡住(即无法进一步读取流/事件)!
小智 6
readStream返回一个可读流,它将在内部缓冲事件,直到它们超过highWaterMark阈值。数据将位于内部队列中直到被消耗,并且流将暂时停止从服务器读取事件,直到当前缓冲的数据被消耗。
当您请求 20 个事件时,它们会放入内部缓冲区中,因此在 20 个事件之后,流将关闭,NodeJS 很乐意停止执行。但是,如果您请求 100 或 1000 个事件,一旦内部缓冲区已满,流将不会关闭,因为仍有事件要从服务器读取,并且它将等待您消耗这些事件。
您需要从缓冲区中提取事件以允许流式读取完成。这可以通过多种方式完成,例如:
迭代 steam:
for await (const { event } of events) {
console.log(event);
}
Run Code Online (Sandbox Code Playgroud)
或添加事件监听器:
events.on("data", (event) => {
console.log(event);
});
Run Code Online (Sandbox Code Playgroud)
您可以在此处阅读有关缓冲的更多信息:https ://nodejs.org/api/stream.html#buffering
| 归档时间: |
|
| 查看次数: |
404 次 |
| 最近记录: |