JS等待mongoose游标完成迭代

JS等待mongoose游标完成迭代,mongoose,stream,Mongoose,Stream,我正在尝试从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 {

我正在尝试从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
当我试图在“on data”函数中对每个res进行控制台日志记录时,它也会在“Checkpoint two”之后进行控制台日志记录,

javascript
stream.on('close',()=>{
log(`Execution ended.Number of elements:${cont}.`);
});
它定义(而不是“执行”)一个函数(每次流关闭时调用该函数),然后直接执行代码。您不能
wait
这一点,您也不能
wait
流.on('data'),因为这是相同的问题。 如果希望父函数等待流完成读取,可以创建一个
new Promise
,该函数由
stream.on('close')
函数填充。然后,您可以在您的
console.log(“检查点二”)
之前等待这一承诺。这应该行得通,你也许想试试。

这会对你有所帮助