我正在尝试从mongodb获取大量数据
有我的代码
let cont = 0
const stream = await dataModel.find({}).lean().cursor(); // it will return around 2.000 elements
console.log("Checkpoint one")
await stream.on('data', async (res) => {
try {
cont += 1
} catch (e) {
console.log(e)
}
});
await stream.on('close', () => {
console.log(`Execution ended. Number of elements: ${cont}.`);
});
console.log("Checkpoint two")
输出:
Checkpoint one
Checkpoint two
Execution ended. Number of elements: 2194.
预期产出:
Checkpoint one
Execution ended. Number of elements: 2194.
Checkpoint two
当我尝试在"数据"函数中控制台记录每个 res 时,它也在"检查点二"之后进行控制台日志记录,
javascript
stream.on('close', () => {
console.log(`Execution ended. Number of elements: ${cont}.`);
});
这定义(而不是"执行"(一个函数(每次关闭流时调用(,然后直接继续执行代码。你不能await
这个,你也不能await
stream.on('data')
,因为这是同一个问题。 如果您希望父函数等待流完成读取,则可以创建一个由stream.on('close')
函数填充的new Promise
。然后,您可以在console.log("Checkpoint two")
之前await
该承诺。这应该有效,您可能想尝试一下。