我有一个函数isValidCode(code)
,其值为true并返回一个布尔值(我已使用typeof()
检查了该类型。)
我使用此函数作为if语句的条件:
if(isValidCode(code)){
console.log('Code is valid!');
}else{
console.log('Code is not valid!');
}
由于某种原因,这不起作用,即使函数计算结果为true,也会执行else语句。为什么是这样?我正在使用node.js。
isValid功能:
exports.isValidCode = pool.pooled(function(client, Code){
var valid;
client.query('SELECT EXISTS(SELECT * FROM codes where code = $1)', [Code], function(err,result){
if (err) console.log('isValidCode error: ' + err);
console.log('isValidCode?: ' + result.rows[0].exists);
valid=result.rows[0].exists;
console.log(typeof(result.rows[0].exists));
});
return valid;
});
答案 0 :(得分:0)
您传递给client.query
的功能是回调。一旦查询返回,这将被异步调用。但是isValidCode
在返回之前不会等待回调。它将调用client.query
并继续执行下一行,即返回语句。该函数将在valid
的值设置为任何值之前返回。
答案 1 :(得分:0)
isValidCode是一个异步函数。这意味着在if语句中进行评估时,isValidCode将评估为未定义,因此" else"中的代码部分运行。
您可以将此功能重写为回调或事件。这是回调版本
isValidCode(code, function(result){
if(result){
// do stuff if result is true
} else {
// otherwise, do other stuff
}
});