【发布时间】:2015-09-11 06:25:27
【问题描述】:
我被困在从用于验证用户的函数中获取结果返回中。
utility.isAspAuth = function(token){
queryString = {
sql: 'SELECT * FROM SecurityToken WHERE Token = ?',
timeout: 40000, // 40s
values: [token]
};
var curTime = new Date();
connection.query(queryString,function(err,rows,field){
if(err){
console.log('error on query' + err);
}else{
var result = rows[0];
result.forEach(function(element, index, array){
if(Date.parse(result.Expires) > curTime){
return true;
}else{
return false;
}
});
}
});
};
所以我在另一个文件中调用了这个函数,但是结果是未定义的
console.log(utility.isAspAuth(token))
谁能给我一些关于如何修复它的提示?
非常感谢
【问题讨论】:
-
异步,异步,异步。您的
connection.query()函数是异步的。这意味着它会在稍后的某个时间调用它的回调,在isAspAuth()已经返回很久之后。您不能从这样的函数返回异步值。相反,您必须将回调传递给isAspAuth(),并在您获得最终值并且只能使用该回调中的值时调用该回调。这类问题有数百个重复。我会去找一个来标记的。