Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Nodejs MySQL连接查询函数调用返回值_Javascript_Mysql_Node.js - Fatal编程技术网

Javascript Nodejs MySQL连接查询函数调用返回值

Javascript Nodejs MySQL连接查询函数调用返回值,javascript,mysql,node.js,Javascript,Mysql,Node.js,我正在尝试从数据库中获取值。用一个演示示例来尝试它。但我在同步调用时遇到问题,尝试使用回调函数。我是node.js的初学者,所以不知道这是否是正确的方法 文件1:app.js var data; var db = require('./db.js'); var query = 'SELECT 1 + 1 AS solution'; var r = db.demo(query, function(result) { data = result; }); console.log( 'Data

我正在尝试从数据库中获取值。用一个演示示例来尝试它。但我在同步调用时遇到问题,尝试使用回调函数。我是node.js的初学者,所以不知道这是否是正确的方法

文件1:app.js

var data;

var db = require('./db.js');

var query = 'SELECT 1 + 1 AS solution';

var r = db.demo(query, function(result) { data = result; });

console.log( 'Data : ' + data);
文件2:db.js

var mysql      = require('./node_modules/mysql');

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

module.exports.demo = function(queryString, callback) {
    try {
        connection.connect();
        console.log('Step 1');

        connection.query(queryString, function(err, rows, fields) {
            console.log('Step 2');
            if (err) {
                console.log("ERROR : " + err);
            }
            console.log('The solution is: ', rows[0].solution);

            callback(rows[0].solution);

            return rows[0].solution;
        });
        callback();

        connection.end();
        console.log('Step 3');
    }
    catch(ex) {
        console.log("EXCEPTION : " + ex);
    }
};
输出:

Step 1
Step 3
Data : undefined
Step 2
The solution is:  2
也提到了这个问题,但没有解决我的问题: 问题在于:

调用回调函数之前,
console.log
将运行,因为
db.demo
是异步的,这意味着可能需要一段时间才能完成,但始终会执行代码的下一行,
console.log

如果要访问结果,需要等待调用回调函数:

var r = db.demo(query, function(result) { 
  console.log( 'Data : ' + result);
});

这就是大多数处理I/O的代码在节点中的工作方式,因此了解它很重要

多谢各位。它的执行方式应该是这样的,但我有一个疑问,通过使用上面的方法,我们只能对回调函数范围内得到的结果执行操作,对吗..?如果我想在函数调用后对数据执行操作,它会工作吗..?不,不会,但节点就是这样工作的。有些库可以缓解这种工作流,如。
var r = db.demo(query, function(result) { 
  console.log( 'Data : ' + result);
});