编辑 - >有用的评论之后,我意识到$超时是不是最好的答案。所以我会用其他的答案在这里同意有关使用的间隔,但我还是建议采用了棱角分明的内置$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 –