NodeJS:从异步函数返回数据
NodeJS: Returning data from an async function
我正在尝试编写一个函数来在我的数据库 (mongodb) 上创建一个新用户,然后 return 该用户作为我定义的对象。但是,由于插入用户的调用是异步的,因此 result.nInserted 始终未定义,因为异步代码未及时完成。因此,我永远不会 return 我的用户。我会在插入完成后尝试使用回调来获取用户,但是我如何才能 return 从我的原始 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;
};
你必须在这里使用承诺模式:
return result.then(function( myNewUser ){
return new User(myNewUser._id, email, false, username, firstname, lastname, company, twitter, config.RANK_USER);
})
来自文档:
Insert
Records can be inserted to a collection with 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,它会有所帮助!
我正在尝试编写一个函数来在我的数据库 (mongodb) 上创建一个新用户,然后 return 该用户作为我定义的对象。但是,由于插入用户的调用是异步的,因此 result.nInserted 始终未定义,因为异步代码未及时完成。因此,我永远不会 return 我的用户。我会在插入完成后尝试使用回调来获取用户,但是我如何才能 return 从我的原始 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;
};
你必须在这里使用承诺模式:
return result.then(function( myNewUser ){
return new User(myNewUser._id, email, false, username, firstname, lastname, company, twitter, config.RANK_USER);
})
来自文档:
Insert
Records can be inserted to a collection with 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,它会有所帮助!