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

我想从数据库中获得价值。 试用一个演示例子。 但我有问题同步的调用,尝试使用callback函数。 我是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从callback返回值

问题是这样的:

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

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

如果你想访问结果,你需要等待callback函数被调用:

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

这是大多数处理I / O的代码将在Node中运行的方式,所以了解它是很重要的。