Javascript 如何在内部函数异步执行某些操作时从外部函数的回调返回值

Javascript 如何在内部函数异步执行某些操作时从外部函数的回调返回值,javascript,asynchronous,callback,promise,asynccallback,Javascript,Asynchronous,Callback,Promise,Asynccallback,我使用调用一个函数,在该函数中,它异步调用db并获取一些值,然后将该值返回给async.series的回调。但是,如何将该值作为外部函数的返回值传递呢 有关更多信息,请参阅下面代码中的注释 getUserObjFromDb = function(username, cb) { var user = {}; async.series([ function(callback){ var userObj = callDb(user

我使用调用一个函数,在该函数中,它异步调用db并获取一些值,然后将该值返回给async.series的回调。但是,如何将该值作为外部函数的
返回值传递呢

有关更多信息,请参阅下面代码中的注释

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

我可能做的这些都是完全错误的,可能有一个更简单的方法,所以任何帮助都将不胜感激。
谢谢。

老实说,我对这个问题不是很清楚。我猜您希望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);
                });
        }

您在这里混合了同步和异步模型。函数调用getUserObjFromDb正在立即执行,由于异步调用尚未完成,因此无法从该函数返回其值


这就是为什么回调是必要的。任何需要用户值的代码都需要由回调触发。

我在GetUserObjFromDb中没有看到返回语句,这是完美的。我想这应该行得通。也就是说,既然我们返回的是异步的结果,那么我是否可以不回调getUserObjFromDb,而是直接从异步的回调中返回用户?这样行吗?getUserObjFromDb=function(username){var user={};返回async.series([function(callback){var userObj=callDb(username);返回callback(null,userObj);}],function(err,results){user=results[0];返回user;});}只能返回一个值。返回回调(null,userObj);或返回结果[0];分配
var user={}没有明显的好处
用户=结果[0]。将
cb(结果[0])是否没有达到预期效果?