Node.js-从回调到主函数的返回值

时间:2019-02-13 23:43:24

标签: javascript node.js mongoose

我想从此函数(其返回对象)返回(true,false)。 我该怎么做才能返回布尔值? 该代码是对用户模块的静态方法

users.statics.is_username_used = function(name) {
    return this.findOne({username: name}, function(error,doc){
        if(is_empty(doc)){
            return false;
        }else{
            return true;
        }
    });
};

2 个答案:

答案 0 :(得分:0)

使用回调函数返回布尔值。例如,您可以将静态代码重写为

// assign a function to the "statics" object of your usersSchema
usersSchema.statics.is_username_used = function(name, cb) {
    return this.findOne({username: name}, function(error, doc){
        if (err) return cb(err, null);
        return cb(null, !is_empty(doc));
    });
};

const User = mongoose.model('User', usersSchema);
User.is_username_used('someusername', (err, usernameExists) => {
    console.log(usernameExists);
});

答案 1 :(得分:0)

如果您拥有Node.js 7.6+,则可以使用async / await功能使您的函数具有同步性。

users.statics.is_username_used = async function(name) {
    var doc = await this.findOne({username: name});

    if (is_empty(doc))
        return false;

    return true;
};

然后将以'await'调用is_username_used函数以获取布尔结果:

var isUsed = await User.is_username_used('someusername');