【问题标题】:JS await for mongoose cursor finish iteratingJS等待猫鼬游标完成迭代
【发布时间】:2018-12-20 20:26:42
【问题描述】:

我正在尝试从 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 进行控制台日志记录时,它也在“检查点二”之后进行控制台日志记录,

【问题讨论】:

标签: mongoose stream


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2016-11-19
    • 2021-01-22
    • 2019-05-10
    • 2018-08-30
    • 2019-03-20
    • 1970-01-01
    • 2017-12-08
    • 1970-01-01
    • 2018-11-29
    相关资源
    最近更新 更多