2014-08-29 176 views
0

我正在用AngularJS構建一個非常基本的應用程序。我需要做的一件事是從列表中刪除項目。試圖做到這一點,我寫了下面的代碼: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。該功能是否異步操作?換句話說,在.forEach完成之前,我的代碼是否可以在angular.forEach以下執行?我一直聽說有關異步操作。但是,我不明白這是什麼時候發生,什麼時候沒有發生。

謝謝

回答

1

不,它不是異步的。 angular.forEach不會異步運行。在forEach完成之前,您的代碼在forEach之下無法運行。這是有保證的。還有一件事是你不必在forEach迭代函數中做return false。在你的情況下它是沒有用的,即使你的第一個項目符合條件,它仍然會運行整個循環。

我想你可能會誤解爲forEach是一個異步操作,可能是因爲你註冊的函數。它只是一個迭代函數,可以用來評估每個迭代。

示例異步函數是$timeout(setTimeout的),$interval(setInterval的),諾回調,AJAX調用靠背,animationFrames等...