[英]NodeJS: Returning data from an async function
我试图编写一个函数在数据库(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;
};
从文档:
插入
记录可以通过插入插入到集合中
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);
};
因此,插入完成后将调用回调函数。
它接收两个参数:error和result。
function callback(err, res){
// some actions
}
阅读此问题 ,将对您有帮助!
您必须在此处使用一个承诺模式:
return result.then(function( myNewUser ){
return new User(myNewUser._id, email, false, username, firstname, lastname, company, twitter, config.RANK_USER);
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.