Javascript 如何访问异步函数节点js中所有函数和条件中的变量?

Javascript 如何访问异步函数节点js中所有函数和条件中的变量?,javascript,reactjs,express,Javascript,Reactjs,Express,我想访问函数内外的k和error值。 我已将k的值初始化为0,将error初始化为空字符串。但是console.log(“executed”)是打印出来的 var k = 0; var error = ""; const { teamname, event_name, inputcount, name, roll } = req.body; function check1(teamname, event_name, callback) { Register.find({ teamna

我想访问函数内外的k和error值。 我已将k的值初始化为0,将error初始化为空字符串。但是
console.log(“executed”)
是打印出来的

var  k = 0;
var error = "";

const { teamname, event_name, inputcount, name, roll } = req.body;
function check1(teamname, event_name, callback) {
    Register.find({ teamname: teamname, eventname: event_name }, (err, docs) => {
        callback(docs.length)
    });
}
check1(teamname, event_name, function (e) {
    if (e != 0) {
        console.log("executed");
        k = 1
    }
});
console.log(k) // 0
console.log(error) // undefined

您可以使用NodeJS全局对象声明全局变量。但在你的例子中,你希望k是1,但它是0。因为NodeJS是异步的,所以您应该在回调中使用console.log(k)

运行此程序时,console.log(k)和console.log(error)会在
check1
函数将值返回回调之前执行。这是一个异步过程。所以你得到的k是0。为了解决这个问题,您应该在回调中使用console.log

var k = 0;
var error = "error";

const { teamname, event_name, inputcount, name, roll } = req.body;
function check1(teamname, event_name, callback) {
        Register.find({ teamname: teamname, eventname: event_name }, (err, docs) => {
            callback(docs.length)
        });
    }
    check1(teamname, event_name, function (e) {
       if (e != 0) {
            console.log("executed");
            k = 1
       }
       console.log(k) // prints 0 or 1
       console.log(error) // prints "error"
    });

将k和error定义为全局变量,如果您使用的是express,您也可以使用app.locals将变量设置为gobalCan您可以发布一些示例代码先生,我尝试过,但相同的结果是您可以使用我的代码发布解决方案在我的代码第10行中,我已将值
k
更新为
1
,但是仍然将值打印为
0
。确保部件已执行,并且在console中
已执行
行也已打印,但k值不再更新。现在我已将全局对象更改为var variable我已看到您更新的帖子,是否有可能更改异步同步,因为这个答案可能会帮助您。让我们来看看。