繁体   English   中英

NodeJS:从异步函数返回数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM