2015-10-15 3 views
0

У меня есть несколько методов для выполнения задачи синхронизации. Я использую $q.all, чтобы сохранить данные синхронизации в локальной базе данных после решения всех обещаний. Это приложение позволяет пользователю запускать синхронизацию и отменять текущую синхронизацию. Поэтому я хочу отменить выполнение всех обещаний ИЛИ отказаться от остановки выполнения. Вот мой пример кода. http://plnkr.co/edit/cMbFs0JZJjF1dC4IavDJ?p=previewЗавершение выполнения угловых обещаний

Любая идея, как остановить выполнение? или любое другое предложение прекратить выполнение метода

ответ

0

Я не думаю, что существует метод kill, потому что js является однопоточным, управляемым событием, u нужен рабочий флаг в контроллере или области действия, проверяйте этот флаг каждый цикл, регистр отказаться, разрешить или отклонить

0

это может быть достигнуто что-то вроде этого -

  1. создать глобальный запрос массив (PendingRequests)
  2. создания пользовательских HTTPService для вызова HTTP АЯКС вызовов (httpService.get(url,data)
  3. cancelSync может быть достигнуто путем вызова

       .service('pendingRequests', function() { 
            var pending = []; 
    
            this.cancelAll = function() { 
            angular.forEach(pending, function(p) { 
             p.canceller.resolve(); 
            }); 
            pending.length = 0; 
            }; 
           }) 
           .service('httpService', ['$http', '$q', 'pendingRequests', function($http, $q, pendingRequests) { 
            this.get = function(url,data) { 
            var canceller = $q.defer(); 
            pendingRequests.add({ 
             url: url, 
             canceller: canceller 
            }); 
            data.timeout = canceller.promise; 
    
            //Request gets cancelled if the timeout-promise is resolved 
            var requestPromise = $http.get(url,data); 
            //Once a request has failed or succeeded, remove it from the pending list 
            requestPromise.finally(function() { 
             pendingRequests.remove(url); 
            }); 
            return requestPromise; 
            } 
           }]) 
    
Смежные вопросы