如果查询搜索包含元素,如何返回布尔值
How to return a boolean if a query search has elements?
我有一个客户端向服务器发送JSON信息,并尝试注册。JSON包括该用户的名称和密码。在服务器向数据库中注册之前,它需要确保用户名可用。为此,我创建了一个名为isRegisterd(req)的函数,该函数对数据库进行搜索,如果result.length大于零,则将布尔值设置为true,并在函数末尾返回该布尔值。mysql搜索在"result"中返回预期的结果,但最后没有设置布尔值,console.log打印未定义的结果。
这是我的代码:
function register(req , res){
res.setHeader('Content-Type', 'application/json');
console.log(isRegisted(req));
}
function isRegisted(req){
var flag;
var query = conn.query("SELECT * FROM Users WHERE name=?", [ req.body.name ], function(err, result) {
if(err){
console.error(err);
return;
}
console.log(result);
if(result.length > 0)
flag = true;
else
flag = false;
});
return flag;
}
感谢您的关注。
代码的问题是,您向数据库发出异步请求。只有在数据库中完成查询后,才会执行函数(err,result)。因此,您无法确定函数(err,result)何时会被调用。因此,在大多数情况下,标志总是未定义的,因为数据库没有执行查询,这会导致未定义的变量标志。为了避免这个问题,请在函数中执行额外的逻辑(错误,结果)。
在这种情况下,您有一个异步。函数,所以父函数不等待子函数执行并返回未定义的。像这样的东西可能对你有用:
var successFn = function() {console.log('success');},
errorFn = function() {console.log('error');};
function register(req , res){
res.setHeader('Content-Type', 'application/json');
console.log(isRegisted(req, successFn, errorFn));
}
function isRegisted(req, successFn, errorFn){
var flag;
var query = conn.query("SELECT * FROM Users WHERE name=?", [ req.body.name ], function(err, result) {
if(err){
errorFn();
}
if(result.length > 0) {
successFn();
}
});
}
相关文章:
- webpack优化最小化返回布尔值,而不是工厂值
- 为什么这个对象方法不返回布尔值Javascript
- 循环返回布尔值
- 如何为窗体返回布尔值's”;onsubmit”;属性,这取决于ajax调用的成功与否
- 如果查询搜索包含元素,如何返回布尔值
- 在使用javax.script.ScriptEngine对象评估javaScript代码后返回布尔值
- 为什么Array.prototype.some返回布尔值
- 在Javascript中返回布尔值时.id与.className的比较
- 通过选择器检查对象是否存在,使用jQuery或Javascript返回布尔值
- 如何从确认对话框插件返回布尔值
- 为什么要!函数之前不返回布尔值相反的值
- 如何根据promise的结果返回布尔值?
- 如何声明一个javascript变量并将其值赋给一个返回布尔值的php文件
- 从函数返回布尔值
- Angular自定义过滤器只返回布尔值=== true的结果
- 编辑:为什么typeof(0)返回布尔值而不是数字?
- jQuery ';不返回布尔值
- 调用一个为ng-show返回布尔值的函数是个好主意吗
- 函数的目的只返回布尔值
- 为搜索的键/值对返回布尔值的最简单方法(Javascript)