我有一个非常基本的场景,我正在NodeJS应用程序中对MySQL进行创建操作调用。一旦获得创建操作的结果(成功或失败),我就必须执行一些代码。
但是现在由于NodeJS的异步行为,我的依赖于结果的代码在MySQL创建操作将结果发送回之前被执行。
这是我的代码
Calculation.js
var mysql = require("mysql");
var methods = {};
// Creating connection
methods.executeQuery = function(selectQuery, values){
var result;
var con = mysql.createConnection({
host: "localhost",
user: "root",
password: "*********",
database: "******"
});
// getting connection
con.connect(function(err){
if(err){
console.log('Error connecting to Db');
return;
}
console.log('Connection established');
});
con.query(selectQuery, values, function(err,rows){
if(err) throw err;
console.log(rows);
result = rows;
console.log(result);
return result;
});
}
module.exports = methods;
client.js
var execute = require("./calculate.js");
var selectQuery = 'INSERT INTO users (username,password) VALUES (?,?)';
var values = ['sohamsoham12','sohamsoham12'];
var insertedRowInfo = execute.executeQuery(selectQuery, values);
if(insertedRowInfo){
console.log("true");
}else{
console.log("false");
}
最佳答案
我不知道我是否正确理解您的问题(例如,“创建操作”是什么?)。但...
您可以尝试以下解决方案:在连接成功回调中执行查询:
// getting connection and executing query
con.connect(function(err){
if(err){
console.log('Error connecting to Db');
return;
}
console.log('Connection established');
con.query(selectQuery, values, function(err,rows){
if(err) throw err;
console.log(rows);
result = rows;
console.log(result);
return result; // this can't work... you should invoke a callback function, here...
});
});
更新:
在OP评论之后,我现在完全理解了这个问题...(对不起:-()。
您只是错过了一些异步行为... :-)
您只需将
methods.executeQuery
从function(selectQuery, values) {
...
}
至
function(selectQuery, values, callback) {
...
}
然后,改为使用
return result;
你应该简单地使用
callback(err, result); // if any error occurred
要么
callback(null, result); // if no error occurred
然后,在
client.js
中,当调用executeQuery
方法时,而不是var insertedRowInfo = execute.executeQuery(selectQuery, values);
你应该做
execute.executeQuery(selectQuery, values, function(err, insertedRowInfo) {
if (err) {
// handle error
} else {
// handle success, using insertedRowInfo...
}
});