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

时间:2019-03-02 03:57:06

标签: javascript reactjs express

我想在函数内部和外部访问k和错误值。 我已经将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

1 个答案:

答案 0 :(得分:2)

您可以使用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"
    });

https://stackabuse.com/using-global-variables-in-node-js/