簡體   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