我正在尝试从数据库中获取价值。用一个演示示例进行尝试。但是我在使用回调函数尝试同步调用时遇到问题。我是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
问题是这样的:
var r = db.demo(query, function(result) { data = result; }); console.log( 'Data : ' + data);
在console.log将运行回调函数被调用之前,因为db.demo是异步的,这意味着它可能需要一些时间来完成,但所有的,而代码的下一行,console.log将被执行。
console.log
db.demo
如果要访问结果,则需要等待回调函数被调用:
var r = db.demo(query, function(result) { console.log( 'Data : ' + result); });
这是大多数处理I / O的代码将在Node中起作用的方式,因此了解它很重要。