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