Javascript 异步回调返回null

Javascript 异步回调返回null,javascript,angularjs,web-applications,angularjs-scope,firebase,Javascript,Angularjs,Web Applications,Angularjs Scope,Firebase,我正在尝试分配回调函数值并显示ng repeat var myApp = angular.module('mybet',[]); myApp.controller('MyBetController', function($scope,$firebase,ProfileFactory,MybetFactory){ $scope.myBetEvents = MybetFactory.getUsersBetsProfile(currentLoggedUser, function(betsD

我正在尝试分配回调函数值并显示
ng repeat

var myApp = angular.module('mybet',[]);

myApp.controller('MyBetController', function($scope,$firebase,ProfileFactory,MybetFactory){

    $scope.myBetEvents = MybetFactory.getUsersBetsProfile(currentLoggedUser, function(betsData){
        //Callback retuning null value here
        $scope.myBetEvents = betsData;
    });

});

myApp.factory('MybetFactory', ['$firebase', function($firebase){

    var factory = {};

    factory.getUsersBetsProfile = function(userId, callback){

        var firebaseRef = new Firebase("https://xxx.firebaseio.com/usersbetsprofile").child(userId);
        var firebaseBetsRef = new Firebase("https://xxx.firebaseio.com/events");
        var userBettedEvent = [];
        //retrive the data
        firebaseRef.on('value', function (snapshot) {
            console.log(snapshot.val());
            var data = snapshot.val();
            if (data){
                //callback(data);
                angular.forEach(data, function(data){
                    console.log('For Each getUsersBets',data);
                    var firebaseEventsData = firebaseBetsRef.child(data.event_id);
                    //retrive the data of bets
                    firebaseEventsData.on('value', function (snapshot) {    
                        userBettedEvent.push(snapshot.val());
                        console.log('userBettedEvent',userBettedEvent);
                        //if I call callback here then i get the values but calling callback multipul time is no the option 
                }, function (errorObject) {
                    console.log('The read failed: ' + errorObject.code);
                    });
                });
                //ISSUE:: callback returing null values
                        callback(userBettedEvent);
            }else{
                console.log('Users has no bets');
            }
        }, function (errorObject) {
            console.log('The read failed: ' + errorObject.code);
            });
    };

    return factory;
}])
视图::

<ul class="list">
        <li class="item" ng-repeat="events in myBetEvents">{{events.event_name}}</li>
 </ul>
  • {{events.event_name}

如何让callback()返回值并显示在视图中?foreach返回null后回调的原因是什么?

正如@coder在评论中所说的,您的
回调(userBettedEvent)
位于错误的位置。在您现在拥有它的地方,它将在Firebase的('value')上的
完成之前被调用

从注释中可以清楚地看到,您已经注意到了,但只希望为一个子级调用回调。您可以简单地使用
限制

类似这样的方法会奏效:

if (data){
    data.limit(1).on('value', function(childData) {
        var firebaseEventsData = firebaseBetsRef.child(childData.event_id);
        firebaseEventsData.on('value', function (snapshot) {    
            userBettedEvent.push(snapshot.val());
            callback(userBettedEvent);
        }
    })
我还没有真正测试过代码,但我很确定
限制应该会让您走上正确的方向


作为一个旁注:你似乎正在使用FielBasic作为一个传统的数据库,像SQL那样把数据拉出来。你可能会注意到:这不是FialBasic的一个自然模型,它是为了同步数据的变化。如果你想坚持拉数据,你可以考虑使用<代码>一次(‘值’< /代码>而不是<代码>)。('value'

以确保每次尝试从Firebase中提取数据时处理程序只触发一次。

您正在等待第一个异步调用完成,但不等待第二个异步调用完成。@epascarello您引用哪一行?查看回调(userBettedEvent);它不在firebaseEventsData.on()回调中