我定期查询数据库以提取可能很大的数据集。为此,我使用 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