gpt4 book ai didi

MongoDB,forEach 和 Promise : How to know when a forEach loop is done?

转载 作者:行者123 更新时间:2023-12-01 00:35:24 25 4
gpt4 key购买 nike

为了输出一个 CSV 文件,我想从 MongoDB 集合中构建一个数据数组。

我用 forEachpromise我想resolve当所有记录都被读取时。

但是我下面的代码不起作用。 promise永远不会解决。 if/else 似乎有一个错误健康)状况。有没有另一种方法可以知道何时 forEach循环完成了吗?

exports.eachRecord = function () {
return new Promise(function (resolve, reject) {
var data = []
mongoClient.connect(process.env.MONGO, function (err, db) {
// Handled connection error
if (err) { return console.log(err) }
db.collection('log').find().forEach(function (doc) {
if (doc !== null) {
console.log(doc.ug)
data.push(doc.ug)
} else {
db.close()
console.log('done!')
resolve(data)
}
})
})
})
}

任何的想法?
非常感谢。

最佳答案

mongodb , 自 v3.0 起,支持 cursor.forEach(iterator, endCallback)

我们必须区分:

  • array.forEach:同步并迭代toArray之后所有加载到内存中的元素数组
  • mongoCursor.forEach:它是异步的,由 mongo 驱动程序管理。您正在流式传输数据,因此您可以将它们放入文件或 http 响应中。

  • 因此,要存档您的需求,您只需要添加一个回调:
        exports.eachRecord = function () {
    return new Promise(function (resolve, reject) {
    const data = []
    mongoClient.connect(process.env.MONGO, function (err, db) {
    if (err) { return reject(err) }

    db.collection('log').find().forEach(
    doc => { data.push(doc.ug) },
    err => {
    if (err) { return reject(err) }
    resolve(data)
    })
    })
    })
    }

    关于MongoDB,forEach 和 Promise : How to know when a forEach loop is done?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41663146/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com