如何在节点js中分配全局和局部变量
How can I assign global and local variables in node js
如果我声明一个变量并从一个方法中赋值并在 method.But 之外打印它显示未定义。
我的代码是,
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
您的函数未 运行,因此未设置值。
var value;
var getValue = function getValue(){
value = 5;
};
getValue(); // call function to set value of 'value'
console.log(value);
在您的第一个示例中,值是在函数中设置的,但从未调用过该函数。因此值为 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
你的问题是你没有等待回调被执行。
而不是
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,可以更轻松地链接异步调用。但是你必须先理解问题,看看你如何用回调来处理它。
如果我声明一个变量并从一个方法中赋值并在 method.But 之外打印它显示未定义。 我的代码是,
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
您的函数未 运行,因此未设置值。
var value;
var getValue = function getValue(){
value = 5;
};
getValue(); // call function to set value of 'value'
console.log(value);
在您的第一个示例中,值是在函数中设置的,但从未调用过该函数。因此值为 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
你的问题是你没有等待回调被执行。
而不是
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,可以更轻松地链接异步调用。但是你必须先理解问题,看看你如何用回调来处理它。