Javascript 全局变量不在NodeJS中工作未定义

Javascript 全局变量不在NodeJS中工作未定义,javascript,node.js,Javascript,Node.js,是否可以在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) ?

是否可以在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;
“未定义”


你可以,你的方法是正确的

未定义
ko
(和
zo
)的原因是,您没有从
getNumbers
返回任何内容,而是使用回调

处理回调中涉及变量的逻辑,或者使用
async
wait


请参阅:

您可以,您的方法将是正确的

未定义
ko
(和
zo
)的原因是,您没有从
getNumbers
返回任何内容,而是使用回调

处理回调中涉及变量的逻辑,或者使用
async
wait


请参阅:

您可以使用以下方法:

global.ko; // Declaration of the global variable - undefined
global.ko = 5; // Global variable initialized to value 5.
您可以这样访问:

var myNumber = global.myNumber;

您可以使用以下方法:

global.ko; // Declaration of the global variable - undefined
global.ko = 5; // Global variable initialized to value 5.
您可以这样访问:

var myNumber = global.myNumber;

下面是对代码的快速修复。如前所述,由于没有从函数返回此值,因此必须在回调中处理此逻辑。此外,即使您将返回一个值,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仍将是未定义的(假定函数当然不是sync):

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!

下面是对代码的快速修复。如前所述,由于没有从函数返回此值,因此必须在回调中处理此逻辑。此外,即使您将返回一个值,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仍将是未定义的(假定函数当然不是sync):

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!

在顶部的“其他功能”中定义“ko”-您的意思是在哪里定义这些功能?如果它们与getNumbers函数属于同一个模块(基本上是“文件”),那么这将起作用。如果要在该模块之外使用结果值“ko”,则需要将其导出。@priyansisrivastava在顶部定义“ko”并不重要,它将在顶部提升。您必须在getNumbers函数中返回结果值才能接收值。var ko=getNumbers(函数(结果){返回结果});返回这样的值是不可行的,因为它是异步操作。return子句的值在回调中,而不是getNumbers。getNumbers函数无法使用“return result”,因为cio.query调用是异步的,并且在getNumbers结束时未设置结果变量。我很感谢您的关注,但是如何将ko变量中的数据传输到zo变量呢。目前ko变量未定义,但zo变量“未定义”。在顶部“其他函数”中定义“ko”-您的意思是在哪里定义这些函数?如果它们与getNumbers函数属于同一个模块(基本上是“文件”),那么这将起作用。如果要在该模块之外使用结果值“ko”,则需要将其导出。@priyansisrivastava在顶部定义“ko”并不重要,它将在顶部提升。您必须在getNumbers函数中返回结果值才能接收值。var ko=getNumbers(函数(结果){返回结果});返回这样的值是不可行的,因为它是异步操作。return子句的值在回调中,而不是getNumbers。getNumbers函数无法使用“return result”,因为cio.query调用是异步的,并且在getNumbers结束时未设置结果变量。我很感谢您的关注,但是如何将ko变量中的数据传输到zo变量呢。目前ko变量未定义,但zo变量“未定义”。请勿使用全局变量!如果你开始用多个进程运行你的应用程序,你会被搞得一团糟。使用全局变量真的是个糟糕的主意。此外,这里真正的问题是异步结果处理,而不是如何使变量全局可见。不要使用全局变量!如果你开始用多个进程运行你的应用程序,你会被搞得一团糟。使用全局变量真的是个糟糕的主意。另外,这里真正的问题是异步结果处理,而不是如何使变量全局可见。很抱歉,“zo”再次未定义,我在哪里出错了:(因为在分配zo之前您可能需要console.log,所以只能保证在某个时间分配它(如果没有错误),但不能立即分配。您应该阅读异步编程。非常抱歉,“zo”再次未定义,我在哪里出错:(因为在分配zo之前可能需要console.log,所以只能保证在某个时间分配zo(如果没有错误),而不是立即分配。您应该阅读异步编程的相关内容。