在angular.forEach上获取TypeError

Getting TypeError on angular.forEach

本文关键字:获取 TypeError forEach angular      更新时间:2023-09-26

我对AngularJS相对陌生,我遇到了一个我不完全理解的错误。在这个代码块上,我得到了一个类型错误(如下所列)。这个错误将我指向sprint.users,它是一个用户数组。

$scope.countThisUserSprintsCompleted = function (user) {
    var thisUserTotalSprintsCompleted = 0;
    angular.forEach($scope.sprints, function(sprint) {
        angular.forEach(sprint.users, function (sprintUser, index) {
            if(sprintUser.username == user.username && sprint.status == 'complete') {
                thisUserTotalSprintsCompleted++;
            }
        });
    });
    return thisUserTotalSprintsCompleted;
};

angular.js:13642 TypeError: Cannot read property 'users' of undefined
at userController.js:2123
at Object.q [as forEach] (angular.js:336)
at m.$scope.countThisUserSprintsCompleted (userController.js:2122)
at fn (eval at compile (angular.js:14539), <anonymous>:4:357)
at m.$digest (angular.js:17211)
at angular.js:17417
at e (angular.js:5912)
at angular.js:6191

这意味着,在提供的代码中,sprint是未定义的。

由于您应该在angular.forEach回调中获得sprint,因此它可能是$scope.sprints中的undefined值。

例如:

[1, undefined, 2].forEach(function(value){
    console.log(value); 
});

要解决这个问题(更多的是一个补丁),您可以在使用sprint:之前添加一个检查

[{ test: "value" }, undefined, { test: "other value" }].forEach(function(value){
  if (value) console.log(value.test); 
});

如果您当时没有期望undefined值,则应在输入forEach之前调查$scope.sprints,并尝试解决该问题。