【问题标题】:How to access a variable in all the function and conditions in asynchronous function node js?如何在异步函数节点js中访问所有函数和条件中的变量?
【发布时间】:2019-07-24 02:28:21
【问题描述】:

我想访问函数内外的 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

【问题讨论】:

  • 将k和error定义为全局变量,如果使用express,也可以使用app.locals将变量设置为gobal
  • 能否请您发布一些示例代码
  • 先生,我试过了,但结果一样,你能用我的代码解决问题吗

标签: javascript reactjs express


【解决方案1】:

您可以使用 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/

【讨论】:

  • 在我的代码第 10 行中,我已将值 k 更新为 1,但仍将值打印为 0。确保该部分已执行并在控制台中 executed 行也打印了,但 k 值没有更新
  • 现在再试一次,我已将全局对象更改为 var 变量
  • 我看过你更新的帖子,有没有可能将异步更改为同步
  • stackoverflow.com/questions/9884418/…这个答案可能会对你有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-25
  • 1970-01-01
相关资源
最近更新 更多