我无法访问在 mongodb 函数之外声明的变量

问题描述

标题说明了一切我都试过了,但变量只是在 console.log 返回 undefined

var kategorilerArray;
dbo.collection("anasayfaKategoriler").find().sort(mysort).toArray(function (err,resultKategoriler) {
    if (err) throw err;
    kategorilerArray = resultKategoriler;
    //console.log(kategorilerArray);
});
console.log(kategorilerArray); // > undefined

解决方法

您记录 undefined 的原因是因为这是 JS 的工作方式,这意味着该行代码将在 kategorilerArray 赋值之前发生。 该行将在回调之前运行(toArray 函数接收该回调),然后才会发生对 kategorilerArray 的分配。

您可以通过在 toArray 回调函数中添加 kategorilerArray 赋值或等待 toArray 函数然后进行赋值来修复它。

这是 JS 事件循环的一部分。

您可以在这篇文章中阅读更多相关信息: https://blog.sessionstack.com/how-javascript-works-event-loop-and-the-rise-of-async-programming-5-ways-to-better-coding-with-2f077c4438b5

,

我修复了它,只需声明 express app.post async

var yorumlarArray = await dbo.collection("yorumlar").find().sort(mysort).toArray();
var kategorilerArray = await dbo.collection("anasayfaKategoriler").find().sort(mysort).toArray();
console.log(kategorilerArray);