AngularJS和异步操作

时间:2014-08-29 18:16:59

标签: javascript angularjs asynchronous

我正在使用AngularJS构建一个非常基本的应用程序。我需要做的一件事是从列表中删除项目。为了做到这一点,我写了以下代码:

$scope.removeItem = function(item) {
  var toRemove = -1;
  angular.forEach($scope.items, function(_item, key) {
    if (item === _item) {
      toRemove = key;
      return false;
    }
  });       

  if (toRemove >= 0) {
    $scope.items.splice(i, 1);
    return true;
  }
  return false;
};

这似乎有效。但是,我的数据集相对较小。我无法弄清楚的是.forEach。该功能是否异步操作?换句话说,在angular.forEach完成之前,.forEach下的代码是否可以执行?我一直听说异步操作。但是,我不明白这种情况何时发生,何时不发生。

谢谢

1 个答案:

答案 0 :(得分:1)

不,它不是异步的。 angular.forEach不会异步运行。你在forEach下面的代码在forEach完成之前无法运行。这是有保证的。还有一件事是你不必在forEach迭代函数中做return false。在你的情况下它是没用的,即使你的第一个项目符合条件,它仍会运行整个循环。

我认为你可能因为你注册的功能而错误地将forEach误解为异步操作。它只是一个迭代函数,可用于评估每次迭代。

异步函数的示例是$timeout(setTimeout),$interval(setInterval),promise回调,ajax回调,animationFrames等......