我使用Async来调用一个函数,在该函数中它异步调用db并获取一些值,然后将该值返回给async.series的回调。但是,如何将值作为外部函数的return
值传递?
有关详细信息,请参阅以下代码中的注释。
getUserObjFromDb = function(username, cb) {
var user = {};
async.series([
function(callback){
var userObj = callDb(username);
callback( null, userObj );
}
],
function(err, results){
user = results[0];
cb(user);
});
}
var theUser = getUserObjFromDb(username, function(user){
return user;
}); // theUser is undefined because the outer function getUserObjFromDb did not return anything even though its callback returned, it was only the callback of the async.series which returned.
如何将user
内部的值传递给theUser
?
我可能会做这一切完全错误,并且可能有一个更简单的方法,所以任何帮助将不胜感激。 谢谢。
答案 0 :(得分:1)
老实说,我并不清楚这个问题。我猜你期待getUserObjFromDb返回回调返回的值。 如果是这样,试试这个:
getUserObjFromDb = function(username, cb) {
var user = {};
return async.series([
function(callback){
var userObj = callDb(username);
return callback( null, userObj );
}
],
function(err, results){
user = results[0];
cb(user);
});
}
答案 1 :(得分:1)
您在这里混合了同步和异步模型。函数调用getUserObjFromDb正在立即执行,并且由于异步调用尚未完成,因此无法从该函数返回它的值。
这就是回调是必要的原因。任何需要用户值的代码都需要由回调触发。