我正在尝试从 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/