问题描述
我定期查询数据库以提取潜在的大型数据集。为此,我使用了 MysqL2 查询流,因此我可以通过异步迭代器使用它。
async* getData(startTime: Date,endTime: Date) : AsyncGenerator<any> {
const query = `
SELECT * FROM ${this.tableName} WHERE 1=1
AND createdAt >= ?
AND createdAt < ?
`;
const recordStream = this.connectionPool.query(query,[startTime,endTime]).stream({ highWaterMark: 1000 });
recordStream.on("error",async (error) => { await handleStreamError(error); });
for await (const record of recordStream) {
yield record;
}
}
问题在于,与 sequalize 或其他客户端相比,查询会返回更少的结果,或者没有数据而不会抛出任何错误。
数据库中的数据此时是静态的,不会改变。
Node.js v14.5.0 是 MysqL2 2.5.0
解决方法
该问题在 Node.js v14.5.0 中出现,但在 14.14.0 及更高版本中没有出现。