JS等待猫鼬光标完成迭代



我正在尝试从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这个,你也不能awaitstream.on('data'),因为这是同一个问题。 如果您希望父函数等待流完成读取,则可以创建一个由stream.on('close')函数填充的new Promise。然后,您可以在console.log("Checkpoint two")之前await该承诺。这应该有效,您可能想尝试一下。

最新更新