【问题标题】:How can I assign global and local variables in node js如何在节点 js 中分配全局变量和局部变量
【发布时间】:2016-05-06 04:54:31
【问题描述】:

如果我声明一个变量并从方法中赋值并在方法外打印。但它显示未定义。 我的代码是,

var value;
var getValue = function getValue(){
    value = 5;
};
console.log(value); 

输出,

undefined

我也在尝试全局变量

var getValue = function getValue(){
    global.value = 5;
};
console.log(value);

但显示一些错误,

console.log(value);
            ^

ReferenceError: value is not defined
    at Object.<anonymous> (~/MyApp/test.js:8:13)
    at Module._compile (module.js:413:34)
    at Object.Module._extensions..js (module.js:422:10)
    at Module.load (module.js:357:32)
    at Function.Module._load (module.js:314:12)
    at Function.Module.runMain (module.js:447:10)
    at startup (node.js:146:18)
    at node.js:404:3

【问题讨论】:

  • 嗯,你必须调用函数来设置值
  • 我的情况是在该方法中有 http post 调用并获得一些响应,我需要将该值保存在本地,我可以实现这个逻辑吗?如果我调用了一个方法,则会向该帖子发出另一个请求。

标签: node.js httprequest local json-web-token


【解决方案1】:

在您的第一个示例中,在函数中设置了值,但从未调用过该函数。因此值为undefined

在全局示例中,值从未被声明,因此也未被定义。

您要做的是调用 getValue(),然后将您的值输出到控制台。

第一个例子:

var value;
var getValue = function(){
    value = 5;
};
getValue();
console.log(value); // should return 5

全局示例:

var global = {}; // create an object otherwise you get a 'global is not defined' error
var getValue = function getValue(){
    global.value = 5;
};
getValue();
console.log(global.value); // should return 5

【讨论】:

  • 我的情况是在该方法中有 http post 调用并获得一些响应,我需要将该值保存在本地,我可以实现这个逻辑吗?如果我调用了一个方法,则会向该帖子发出另一个请求。
  • 本地相对于函数?抱歉,我不确定我是否关注
【解决方案2】:

您的函数未运行,因此未设置值。

var value;
var getValue = function getValue(){
    value = 5;
};
getValue(); // call function to set value of 'value'

console.log(value); 

【讨论】:

    【解决方案3】:

    你的问题是你没有等待回调被执行。

    代替

    app.post('/authenticate', function(req, res) {
        var userToken;
        ...
        amqHandler.reciveData(amqpConnection ,function(err,data){
            if(!err){
                httpRequestHandler. makeHttpRequest(data, function(err,userToken){
                    global.apiResponce = JSON.parse(userToken).token;
                    global.convertedObjects = JSON.stringify(apiResponce);
                    console.log("convertedObjects==>"+convertedObjects);
                    userToken = {token:JSON.stringify(apiResponce)};
                });
            }
        });
        res.send({msg:userToken}); // this is executed before the end of reciveData
    });
    

    您必须发送响应来自传递给异步函数的回调:

    app.post('/authenticate', function(req, res) {
        ...
        amqHandler.reciveData(amqpConnection ,function(err,data){
            if(!err){
                httpRequestHandler. makeHttpRequest(data, function(err,userToken){
                    global.apiResponce = JSON.parse(userToken).token;
                    global.convertedObjects = JSON.stringify(apiResponce);
                    console.log("convertedObjects==>"+convertedObjects);
                    var userToken = {token:JSON.stringify(apiResponce)};
                    res.send({msg:userToken}); // <=== send here
                });
            }
        });
    });
    

    请注意,有一些构造,尤其是 promises,它可以更轻松地链接异步调用。但你必须先了解问题,然后看看如何使用回调来处理它。

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2018-02-17
      • 2012-08-12
      • 1970-01-01
      • 2019-04-04
      • 2013-10-06
      • 2012-06-09
      相关资源
      最近更新 更多