【问题标题】:Node.js - return value from callback to the main functionNode.js - 从回调到主函数的返回值
【发布时间】:2019-02-17 02:28:40
【问题描述】:
我想从这个函数返回 (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;
}
});
};
【问题讨论】:
标签:
javascript
node.js
mongoose
【解决方案1】:
使用回调函数返回布尔值。例如,您可以将静态重写为
// 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);
});
【解决方案2】:
如果您有 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;
};
然后函数 is_username_used 将被调用 'await' 以获得布尔结果:
var isUsed = await User.is_username_used('someusername');