终止Angular Promises执行

时间:2015-10-15 06:44:14

标签: javascript angularjs angular-promise

我没有几种方法可以执行同步任务。在解析所有承诺后,我正在使用$q.all将同步数据保存到本地数据库中。此应用程序允许用户开始同步并取消正在进行的同步。所以我想取消所有承诺执行或拒绝停止执行。这是我的示例代码。http://plnkr.co/edit/cMbFs0JZJjF1dC4IavDJ?p=preview

知道如何阻止这些执行吗?或任何其他终止方法执行的建议

2 个答案:

答案 0 :(得分:0)

我认为没有kill方法,因为js是基于单线程的,事件驱动的,你需要在控制器或范围内有一个工作标志,每个循环检查这个标志,case放弃,解决或拒绝< / p>

答案 1 :(得分:0)

可以实现这样的目标 -

  1. 创建全局请求数组(pendingRequests)
  2. 创建自定义httpService以调用http ajax调用(httpService.get(url,data
  3. 可以通过调用pendingRequests.cancelAll()

    来实现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;
                      }
                    }])