NodeJS:从asynchronous函数中返回数据

我试图编写一个函数来创build一个新的用户在我的数据库(mongodb),然后返回该用户作为我定义的对象。 但是,由于插入用户的调用是asynchronous的,result.nInserted总是未定义的,因为asynchronous代码没有及时完成。 因此,我永远不会回到我的用户。 我会尝试使用callback来获取用户完成插入后,但那么我将如何能够从我原来的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; }; 

从文档:

可以使用插入将logging插入到集合中

collection.insert(docs[[, options], callback])

所以你想要通过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); }; 

所以当插入完成时会调用callback函数。

它收到两个参数:错误和结果。

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