Javascript 为什么不';t对foreach函数回调中的全局变量所做的更改反映了回调
我正在尝试从mongoDB atlas检索一些文档,下面是代码:Javascript 为什么不';t对foreach函数回调中的全局变量所做的更改反映了回调,javascript,mongodb,asynchronous,foreach,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 =
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输出更新的PageBucket数组,但第二个console.log输出空数组。我无法理解问题所在。发现第二个console.log是在foreach循环之前执行的,因此使用以下代码修复了它:
result.forEach(el =>{
pageBuckets.push(el);
console.log(pageBuckets) //1
}).then(() =>{
console.log(pageBuckets); //2
})
嗯,对mongoClient不太熟悉。res.send是否真的终止了呼叫?Loredra,如果您询问“res.send”(“error:+err”)是否真的发送了响应并终止了呼叫,那么答案是否定的,因为我没有收到任何错误消息,正如我前面提到的,我能够看到第一个console.log的输出,而不是第二个console.log的输出。