NodeJS:从异步函数返回数据

时间:2015-02-20 07:45:51

标签: javascript node.js mongodb asynchronous

我试图编写一个函数来在我的数据库(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;
};

2 个答案:

答案 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);
})