Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在节点中将函数作为条件求值_Javascript_Node.js_If Statement_Conditional Statements - Fatal编程技术网

Javascript 在节点中将函数作为条件求值

Javascript 在节点中将函数作为条件求值,javascript,node.js,if-statement,conditional-statements,Javascript,Node.js,If Statement,Conditional Statements,我有一个函数isValidCode(code),它的计算结果为true并返回一个布尔值(我已经使用typeof()检查了类型) 我将此函数用作if语句的条件: if(isValidCode(code)){ console.log('Code is valid!'); }else{ console.log('Code is not valid!'); } 由于某种原因,这不起作用,即使函数的计算结果为true,也会执行else语句。为什么会这样?我正在使用node.js isVa

我有一个函数
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;
});

传递给
客户端查询的函数是回调函数。一旦查询返回,将异步调用。但是,
isValidCode
不会在返回之前等待回调。它将调用
client.query
,并转到下一行,即返回语句。函数将在
valid
的值设置为任何值之前返回。

isValidCode是一个异步函数。这意味着在if语句中求值时,isValidCode将求值为未定义,因此“else”部分中的代码将运行

可以将此函数重写为回调或事件。这是回调版本

isValidCode(code, function(result){
    if(result){
        // do stuff if result is true
    } else {
        // otherwise, do other stuff
    }
});

你能分享
isValidCode
的代码吗?是的,我们需要查看你的
isValidCode()
函数来判断它是否返回你想要的内容。
typeof()
打印布尔值。