Как получить доступ к переменной во всех функциях и условиях в узле асинхронной функции js? - PullRequest
0 голосов
/ 02 марта 2019

Я хочу получить доступ к k и значению ошибки внутри и снаружи функции.Я инициализировал значение для k как 0 и ошибку как пустую строку.Но 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 голосов
/ 02 марта 2019

Вы можете объявить глобальные переменные , используя глобальный объект NodeJS.Но в вашем случае вы хотите, чтобы k было 1, а это 0. потому что NodeJS асинхронный , вы должны console.log (k) внутри обратного вызова.

Когда вы запускаете эту программу, console.log (k) и console.log (ошибка) выполняется до того, как функция 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/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...