Javascript 如何在node js mysql查询函数中找到匿名函数外的返回变量值

Javascript 如何在node js mysql查询函数中找到匿名函数外的返回变量值,javascript,mysql,node.js,anonymous-function,Javascript,Mysql,Node.js,Anonymous Function,你好,朋友,我是NodeJS新手,我们如何获得mysql查询匿名函数中使用的变量值 var alldata = function(){ var http = require('http'), mysql = require('mysql'); var client = mysql.createConnection({ host: '127.0.0.1', user: 'root', password: '' }); client.connect(); client

你好,朋友,我是NodeJS新手,我们如何获得mysql查询匿名函数中使用的变量值

var alldata = function(){

var http = require('http'), mysql = require('mysql');

var client = mysql.createConnection({
       host: '127.0.0.1',
   user: 'root',
   password: ''
});

client.connect();
client.query("use cakephp2");

client.query("SELECT id, title,body,created from posts", 
        function(err, results, fields) {
            if (err) throw err;

            var output = '<h1>Latest Posts</h1><ul><table border=1><tr>';
            for (var index in fields) {
                output += '<td>' + fields[index].name + '</td>';
            }
            output += '</tr>';
            for (var index in results) {
                output += '<tr><td>' + results[index].id + '</td>';
                output += '<td>' + results[index].title + '</td>';
                output += '<td>' + results[index].body + '</td>';
                output += '<td>' + results[index].created + '</td></tr>';
            }
            output += '</ul>';
            // console.log(output);
            // return output;

        }
    ); 
  return  output ;
}
exports.alldatas = alldata();
var alldata=function(){
var http=require('http'),mysql=require('mysql');
var client=mysql.createConnection({
主持人:“127.0.0.1”,
用户:'根',
密码:“”
});
client.connect();
client.query(“使用cakephp2”);
client.query(“选择id、标题、正文、从帖子创建的内容”,
函数(错误、结果、字段){
如果(错误)抛出错误;
var输出='最新发布
    '; for(字段中的var索引){ 输出+=''+字段[索引]。名称+''; } 输出+=''; for(结果中的var指数){ 输出+=''+结果[索引].id+''; 输出+=''+结果[索引]。标题+''; 输出+=''+结果[索引]。正文+''; 输出+=''+结果[索引]。已创建+''; } 输出+='
'; //控制台日志(输出); //返回输出; } ); 返回输出; } exports.alldatas=alldata();
在上面的代码中,我在client.query中使用console.log(output)时未找到返回的输出结果,但无法访问匿名函数之外的输出值

请帮帮我


提前感谢。

尝试此操作并将变量范围定义为全局变量

DBDATA=”“;
var alldata=function(){
var http=require('http'),mysql=require('mysql');
var client=mysql.createConnection({
主持人:“127.0.0.1”,
用户:'根',
密码:“”
});
client.connect();
client.query(“使用cakephp2”);
client.query(“选择id、标题、正文、从帖子创建的内容”,
函数(错误、结果、字段){
如果(错误)抛出错误;
var输出='最新发布
    '; for(字段中的var索引){ 输出+=''+字段[索引]。名称+''; } 输出+=''; for(结果中的var指数){ 输出+=''+结果[索引].id+''; 输出+=''+结果[索引]。标题+''; 输出+=''+结果[索引]。正文+''; 输出+=''+结果[索引]。已创建+''; } 输出+='
'; DBDATA=输出; //控制台日志(输出); //返回输出; } ); 返回输出; } log(DBDATA); exports.alldatas=alldata();
您将无法在回调函数之外访问该变量。原因是,Node.js有一个特殊功能,即在执行异步IO任务(在您的示例中是mysql查询)后,将回调函数作为下一个要执行的代码块传递

当程序进入IO模式时,回调函数立即执行后编写的代码。而
输出
变量在启动回调之前尚未准备就绪。因此,您无法访问它

你可以阅读


您必须在该回调函数中使用
输出
,或者在那里调用其他函数,并将
输出
作为参数传递给它。

不起作用。。。如何将变量的范围定义为全局变量?见mu更新answer@dianuj您仍在访问传递给
client.query
函数的回调之外的
输出。正如我在回答中所解释的那样,在那里无法访问输出
 DBDATA="";
var alldata = function(){

var http = require('http'), mysql = require('mysql');

var client = mysql.createConnection({
       host: '127.0.0.1',
   user: 'root',
   password: ''
});

client.connect();
client.query("use cakephp2");

client.query("SELECT id, title,body,created from posts", 
        function(err, results, fields) {
            if (err) throw err;

            var output = '<h1>Latest Posts</h1><ul><table border=1><tr>';
            for (var index in fields) {
                output += '<td>' + fields[index].name + '</td>';
            }
            output += '</tr>';
            for (var index in results) {
                output += '<tr><td>' + results[index].id + '</td>';
                output += '<td>' + results[index].title + '</td>';
                output += '<td>' + results[index].body + '</td>';
                output += '<td>' + results[index].created + '</td></tr>';
            }
            output += '</ul>';
            DBDATA=output;
            // console.log(output);
            // return output;

        }
    ); 
  return  output ;
}
console.log(DBDATA);
exports.alldatas = alldata();