我是node.js的新手,并使用ari客户端。 我有两个.js文件,第二个需要第一个。我在第二个文件中声明了一个变量,它必须包含第一个文件的返回值,但是console.log(变量)是未定义的,尽管在第一个文件中返回值不为null。
在第一个文件中:
var db = require("./database.js");
var service_info = db.select(connection,'select * from services where ivr_shortcode = ?',service);
console.log(service_info);
service_info未定义;
在第二个文件中:
this.select = function (connection,query,data){
connection.query(query,[data],function(err, results){
if(err)
{
throw err;
}
else
{
return results;
}
});}
答案 0 :(得分:2)
由于调用是异步的,你不能只从回调中返回值,你应该使用另一个函数来获得结果:
// file 'database.js'
exports.select = function (connection, query, data, callback) {
connection.query(query, [data], callback);
}
比你的主要:
// I assume `connection` and `service` are defined somewhere before (like in your original code)
var db = require("./database.js");
var service_info = db.select(connection,'select * from services where ivr_shortcode = ?',service, function(err, service_info){
console.log(service_info);
});
P.S。 您应该阅读一些文档并查看Why is my variable unaltered after I modify it inside of a function? - Asynchronous code reference以更好地了解范围可见性和闭包
答案 1 :(得分:0)
要处理这种情况,您需要使用async / await来实现它。
exports.select = async function (connection,query,data){
await connection.query(query,[data],function(err, results){
if(err){
throw err;
}else{
return
}
});
}
这将一直等到您得到结果。因此,永远不会出现不确定的情况。
答案 2 :(得分:-1)
你必须导出select。 像这样的东西:
exports.select = function (connection,query,data){
connection.query(query,[data],function(err, results){
if(err)
{
throw err;
}
else
{
return
}
});}