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

时间:2013-03-26 11:21:49

标签: 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 : ' + 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

也提到了这个问题,但它没有解决我的问题: nodeJS return value from callback

1 个答案:

答案 0 :(得分:3)

问题是:

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

console.log( 'Data : ' + data);

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

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

console.log

这就是大多数处理I / O的代码将在Node中运行的方式,因此了解它非常重要。