То, что я пытаюсь достичь, очень прямолинейно, но я в замешательстве. Я пытаюсь сделать очередь, в которой хранятся больничные пациенты, они будут регистрироваться в системе, добавляться в массив (FIFO), а затем через определенный интервал их следует удалить из очереди. Я использую angularjs для добавления объектов в массив и заданную функцию интервала времени.
(function () {
angular.module('patientsApp')
.controller('patientsController', ['$scope', function ($scope) {
var vm = this;
vm.queue = [];
vm.patient = {};
vm.save = function () {
patient = angular.copy(vm.patient);
vm.queue.push(patient);
for(var i = 1; i <= vm.queue.length; i++) {
(function(index) {
setTimeout(function () { vm.queue.shift(); $scope.$apply(); }, i * 3000);
})(i);
}
vm.queue.forEach(function (cv, i) {
waitTime = 0;
setTimeout(function () {
vm.queue.shift();
$scope.$apply();
}, 3000 + waitTime);
waitTime += 3000;
})
}
}]);
})();
Это мой код, я сделал 2 примера, пытающихся перебрать массив. Если вы заметили, чтобы сделать это автоматически, я добавил метод в метод добавления формы. Идея состоит в том, чтобы установить интервал, например, 3 секунды, но они не должны запускаться одновременно, они должны находиться на расстоянии 3 секунды друг от друга. Заранее спасибо.
Мне пришлось создать отдельную кнопку для обработки временного интервала.
(function () {
angular.module('patientsApp')
.controller('patientsController', ['$scope', '$interval', function ($scope, $interval) {
var vm = this;
vm.queue = [];
vm.patient = {};
vm.timer = function () {
var interval = $interval(function () {
vm.queue.shift();
}, 60000, vm.queue.length);
}
vm.save = function () {
patient = angular.copy(vm.patient);
vm.queue.push(patient);
}
}]);
})();
это конечный результат.
Не используйте $ timeout, вместо этого используйте $ interval.
добавьте $ interval в свои зависимости:
.controller('patientsController', ['$scope', '$interval', function ($scope, $interval) {
и использовать его таким образом:
var index = 0;
var interval = $interval(function(){
if(vm.queue.length > index)
$interval.cancel(interval); //turn off the $interval at completion of all elements..
vm.queue[index].shift();
index++;
}), 3000);