JS等待mongoose游标完成迭代
我正在尝试从mongodb获取大数据 这是我的密码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 {
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(“检查点二”)
之前等待这一承诺。这应该行得通,你也许想试试。这会对你有所帮助