我是节点js的新手,我正在为我的模型使用mongoose。
我有一个函数namde check,它有一个isNameThere函数,它接收名字字符串作为参数。它检查Db并查找名称字符串,如果用户以此名称存在,则提供该字符串this.isNameThere将返回true
var check= function()
{
this.nameIsThere = false;
this.isNameThere= function(name){
userModel.find({firstname: name},function(err,result){
if(result)
{
this.nameIsThere= true;
}
})
return this.nameIsThere;
}
}
即使名称存在,您猜测上面的代码将返回 false ,因为异步编程的性质。有没有办法在 userModel.find 执行后执行 return isNameThere 。或针对这种情况的任何其他解决方案谢谢大家。
答案 0 :(得分:0)
小心分号,你忘记了一些。在JavaScript中,将开放括号放在函数头的旁边而不是下一行也是很好的做法。
您可以将DB调用封装在如下函数中:
function checkForName (callback) {
userModel.find({firstname: name}, callback);
}
checkForName(function (err, result) {
if (result) {
nameIsThere = true;
//do something else
...
}
});
毕竟,它是非同步的,所以你不会获得任何同步返回值。
还有另一种方式:承诺。有些图书馆供您查看: