0

我是节点 js 的新手,我在模型中使用猫鼬。

我有一个函数 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执行后执行返回 isNameThere。或针对这种情况的任何其他解决方案。谢谢大家。

4

1 回答 1

0

Careful with the semicolons, you forgot some. It´s also good practice in JavaScript to place opening brackets right next to the function header and not in the next line.

You can encapsulate the DB call in a function like this:

function checkForName (callback) {
    userModel.find({firstname: name}, callback);
}

checkForName(function (err, result) {
    if (result) {
        nameIsThere = true;
        //do something else
        ...
    }
});

After all, it IS anychronous, so you will not get any synchronous return value.

There´s also another way: Promises. Some libraries for you to check out:

于 2013-10-18T21:15:50.707 回答