javascript - 为什么在 foreach 函数回调中对全局变量所做的更改不反射(reflect)取消回调

标签 javascript mongodb asynchronous foreach

我正在尝试从 mongoDB atlas 中检索一些文档,下面是代码:

get('/:page/bucket_names', (req, res) => {
    var page = req.params.page;
    var pageBuckets = [];
    MongoClient.connect(uri, (err, client) => {
        if (err) res.send('error:' + err);
        const db = client.db("cms");
        db.collection(page).find({ $or: [{ type: 'single' }, { type: 'carousel' }, { type: 'freelist' }] }, (err, result) => {
            if (err) res.send('error');
            else {
                result.forEach(el => {
                    pageBuckets.push(el);
                    console.log(pageBuckets) //1
                })
                console.log(pageBuckets)  //2
            }
        })
        client.close();
    })
})

第一个 console.log 输出更新的 pageBuckets 数组,但第二个 console.log 输出一个空数组。我无法理解问题所在。

最佳答案

原来第二个 console.log 在 foreach 循环之前被执行,所以用下面的代码修复它:

result.forEach(el =>{
        pageBuckets.push(el);
          console.log(pageBuckets) //1
      }).then(() =>{
        console.log(pageBuckets); //2
      })

关于javascript - 为什么在 foreach 函数回调中对全局变量所做的更改不反射(reflect)取消回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54482472/

相关文章:

python - 使用 mongoengine 从字典中的列表中提取

ios - GCD 实现不适用于 PARSE 查询 (Swift)

java - Spring Integration DSL - Wiretap 不异步运行

javascript - Angular 1.5 $onChanges

javascript - jQuery 可排序标签点击事件不起作用

mongodb - Top-K排序算法在MongoDB中是如何工作的

c# - 异步任务在自定义操作过滤器中挂起?

javascript - Cordova 和 Bootstrap : unable to open a modal via javascript

javascript - 找不到本 map 片

mongodb - 使用聚合的 $lt 100 的 $sum