我试图编写一个函数来在我的数据库(mongodb)上创建一个新用户,然后将该用户作为我定义的对象返回。但是,由于插入用户的调用是异步的,因此始终未定义result.nInserted,因为异步代码没有及时完成。因此,我永远不会返回我的用户。在插入完成后,我会尝试使用回调来获取用户,但是我怎样才能从原来的addUser函数返回该数据?
User.addUser = function(db, email, username, password, firstname, lastname, company, twitter){
var _id = new mongodb.ObjectID();
var result = db.get('users').insert({
_id: _id,
email : email,
verified : false,
password : password,
username : username,
firstname : firstname,
lastname : lastname,
company : company,
twitter : twitter,
rank : config.RANK_USER
});
return result.nInserted == 1 ? new User(_id, email, false, username, firstname, lastname, company, twitter, config.RANK_USER) : false;
};
答案 0 :(得分:2)
来自文档:
插入
可以使用insert
将记录插入到集合中
collection.insert(docs[[, options], callback])
所以你想要的可以通过回调功能完成。
我认为你可以解决你的任务
User.addUser = function(db, email, username, password, firstname, lastname, company, twitter, callback){
var _id = new mongodb.ObjectID();
db.get('users').insert({
_id: _id,
email : email,
verified : false,
password : password,
username : username,
firstname : firstname,
lastname : lastname,
company : company,
twitter : twitter,
rank : config.RANK_USER
}, callback);
};
因此,插入完成后将调用回调函数。
它收到两个参数:错误和结果。
function callback(err, res){
// some actions
}
阅读此question,它可以提供帮助!
答案 1 :(得分:0)
你必须在这里使用承诺模式:
return result.then(function( myNewUser ){
return new User(myNewUser._id, email, false, username, firstname, lastname, company, twitter, config.RANK_USER);
})