如何才能找到节点JS MySQL查询功能返回匿名函数外部变量的值(how can find retu

2019-10-29 14:48发布

这位朋友你好我是在节点JS新的,我们怎样才能在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();

在上面的代码中,我没有发现返回的输出结果,而在client.query时使用的console.log(输出)给出正确的结果,但匿名函数的外面不能访问产值。

请帮我

提前致谢 。

Answer 1:

您将无法访问回调函数之外的变量。 原因是,Node.js的具有传递一个回调函数作为一个代码块的特殊功能(在你的情况下,MySQL查询)执行异步IO任务后执行。

当你的程序进入IO模式下,您的回调函数后编写的代码被立即执行。 和output ,直到回调触发变量还没有准备好。 因此,你不能访问它。

你可以阅读这里

你将不得不UE的output是回调函数中,或致电其他一些功能存在,并通过output到它作为一个参数。



Answer 2:

试试这个,定义变量的作用域为全局

 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();


文章来源: how can find return variable value outside anonymous function in node js mysql query function