Создайте автоматическую очередь JavaScript со временем ожидания для сдвига элементов

0

То, что я пытаюсь достичь, очень прямолинейно, но я в замешательстве. Я пытаюсь сделать очередь, в которой хранятся больничные пациенты, они будут регистрироваться в системе, добавляться в массив (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 секунды друг от друга. Заранее спасибо.

Теги:
javascript-objects
angularjs-timeout

2 ответа

0
Лучший ответ

Мне пришлось создать отдельную кнопку для обработки временного интервала.

(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);
         }

     }]);
})();

это конечный результат.

0

Не используйте $ 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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню