編輯 - >有用的評論之後,我意識到$超時是不是最好的答案。所以我會用其他的答案在這裏同意有關使用的間隔,但我還是建議採用了棱角分明的內置$interval服務:
(function() {
'use strict';
angular.module('MyApp', []);
angular
.module('MyApp')
.controller('MyCtrl', MyCtrl);
MyCtrl.$inject = ['$scope', '$interval'];
function MyCtrl($scope, $interval) {
$scope.players = ['a', 'b', 'c', 'd', 'e'];
var INTERVAL_LENGTH = 1000; // This can be however long you want
var INTERVAL_COUNT = $scope.players.length;
if (INTERVAL_COUNT > 0) {
$interval(function() {
var random = Math.floor(Math.random() * $scope.players.length);
$scope.players.splice(random, 1);
}, INTERVAL_LENGTH, INTERVAL_COUNT).then(function() {
$scope.players = 'done!';
});
}
}
})();
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="MyApp" ng-controller="MyCtrl">
<span>{{ players }}</span>
</div>
$interval
也返回其解決的承諾時,最後一次迭代完成,因此可以輕鬆處理任何間隔完成後要執行的異步工作。
以前的答案:
角提供$timeout服務。將其作爲依賴項注入控制器之後:
var PAUSE_AMOUNT = 500; // This can be however long you want
while($scope.players.length > 0){
$timeout(function() {
random = Math.floor(Math.random() * $scope.players.length);
$scope.players.splice(random, 1);
}, PAUSE_AMOUNT);
}
這將在while循環的每次迭代之間暫停500 ms。
有在你的答案沒有while循環,並沒有退出策略要麼 –
我指的是在原來的問題while循環,我會在代碼中添加它爲清楚起見 –
我只是不認爲它會暫停執行while循環:p –