Javascript 将新值推送到数组仍然返回空值-AngularJS

Javascript 将新值推送到数组仍然返回空值-AngularJS,javascript,angularjs,Javascript,Angularjs,我的控制器中有这段代码 controller('ChallengeCtrl',function($scope,$http){ $scope.challenged = []; $scope.checkVideo = function (video) { var response; console.log(url); return $http.get(url).success(function(data) {

我的控制器中有这段代码

controller('ChallengeCtrl',function($scope,$http){
    $scope.challenged = [];

    $scope.checkVideo = function (video) {
        var response;
        console.log(url);
        return $http.get(url).success(function(data) {
            return data;
        }).error(function(data){
            return data;
        });
    }

    $scope.challengeMe = function() {
        $scope.checkVideo($scope.selectedVideo).then(function(data){
            $scope.challenged = data.data;
            console.log($scope.challenged); //working
        });
    }

    $scope.printChallenge = function() {
        console.log($scope.challenged); //not working, returns [] null
    }
});
调用
challengeMe()
函数时,我分配了
$scope.challenged
的值,并尝试在我的
printcreallenge()
函数中调出
$scope.challenged
数组中的值,但它返回为null

由于ChallengeMe()是一个异步函数,因此在调用PrintChallenge()方法之前需要一个计时器函数,以便等待数据填充(这是一种错误的方法,因为通常我们不知道在填充数据多少时间后,您可以在ChallengeMe()之后进行WHILE循环)在PrintChallenge()调用之前调用。在WHILE循环中,可以检查$scope.challenged是否为NULL


.then方法中的控制台消息在ChallengeMe()中起作用,因为.then仅在AJAX调用完成后执行。但此时,执行必须进一步移动到PrintChallenge()方法,而不等待数据,因此PrintChallenge()调用中的控制台消息没有任何内容。

假设您在页面加载时调用了
challengeMe()
PrintChallenge()
,发生此问题的原因是
challengeMe()
有一个异步函数调用,该调用填充
$scope.challenged
中的数据。当异步调用正在进行时,您正在执行函数ie
printChallenge()
,没有时间延迟,并且由于调用尚未在
challengeMe()
中完成,因此
$scope.challenged
不会填充任何数据


要解决此问题,您可以添加一个
$timeout
,也可以按照您在
challengeMe()中所做的方式记录您的值。

尝试关闭
。然后用
}关闭
不仅仅是
}
。如果你不能正确结束它,它将抛出一个错误。哦,一个打字错误,它实际上是用
}结束的在我的实际代码中。感谢您指出..您有任何日志错误吗?可能重复@slverstone,这是因为
$scope.$apply()
是错误的。