[英]Global variable not working in NodeJS undefined
是否可以在node.js函数中定义全局变量?
我想在其他函数中使用ko变量(在getNumbers函数中声明)
function getNumbers(callback) {
result = cio.query("SELECT numbers FROM rooms WHERE durum='1'", function (err, result) {
if (err) throw err;
callback((result.length > 0) ? result[0].numbers : "");
});
}
var ko = getNumbers(function (result) {
console.log(result)
});
var zo = ko;
“不确定”
46,16,55,12,74,48,77,42,4,29,14,81,13,35,39,85,7,54,27,66,41,9,17,82,31,21,57,79,62,56,11,49,3,33,64,8,83,88,61,18,58,63,51,90,22,71,67,69,75,6,2,34,30,25,38,28,68,5,50,15,87,19,65,36,45,24
C:\wamp64\www\node\st\rooms.js:497
var datadad = zo[Math.floor(Math.random()*zo.length)];
^
TypeError: Cannot read property 'length' of undefined
at sayiver (C:\wamp64\www\node\st\rooms.js:497:54)
at Timeout._onTimeout (C:\wamp64\www\node\st\rooms.js:513:5)
at ontimeout (timers.js:436:11)
at tryOnTimeout (timers.js:300:5)
at listOnTimeout (timers.js:263:5)
at Timer.processTimers (timers.js:223:10)
您可以,您的方法将是正确的。
未定义ko
(和zo
)的原因是因为您没有从getNumbers
返回任何内容,而是在使用回调。
处理回调中涉及变量的逻辑,或者使用async
和await
。
请参阅: 异步JavaScript
这是您的代码的快速修复。 如前所述,由于您没有从函数中返回此值,因此必须在回调内部处理此逻辑。 同样,即使您返回一个值,ko仍将是未初始化的(当您尝试将其值分配给zo时),因为您使用异步操作从DB中获取了一些东西,并且您不必等待数据就可以分配。
function getNumbers(callback) {
result = cio.query("SELECT numbers FROM rooms WHERE durum='1'", function (err, result) {
if (err) throw err;
callback((result.length > 0) ? result[0].numbers : "");
});
}
var ko;
var zo;
getNumbers(function (result) {
ko = result;
console.log(result);
zo = ko;
});
这是一个代码示例,其中zo仍将是未定义的(假定功能当然不是同步的):
function getNumbers(callback) {
result = cio.query("SELECT numbers FROM rooms WHERE durum='1'", function (err, result) {
if (err) throw err;
callback((result.length > 0) ? result[0].numbers : "");
});
}
var ko;
getNumbers(function (result) {
ko = result;
console.log(result);
});
var zo = ko; //Not good!
您可以使用这种方法:
global.ko; // Declaration of the global variable - undefined
global.ko = 5; // Global variable initialized to value 5.
您可以这样访问:
var myNumber = global.myNumber;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.