角度承诺存在多长时间?

时间:2014-02-25 03:15:13

标签: javascript angularjs

我正在尝试了解角度服务和组件的生命周期。

假设我有一个使用http服务的控制器:

function MyController($scope, $http) {
  $http.get('/service').success(function(data) {
    // handle the response
  });
}

问题是该控制器可能附加到视图。并且我想确保在删除视图时放弃响应,这是为了防止与应用程序的其他部分中可能触发的其他请求冲突。是否会破坏控制器的实例,如果视图被删除,是否会取消$http服务的待处理呼叫?例如,当用户从页面导航(不重新加载)导致Javascript渲染新部分时?

[编辑]我创建了一个jsfiddle,表明至少对于$ timeout服务,在导航销毁$scope后,挂起的操作仍在运行远。是否有一种简单的方法可以将异步操作附加到作用域,以便自动销毁它们?

1 个答案:

答案 0 :(得分:2)

首先,附加对您的承诺的引用,然后将该引用传递给cancel函数。这可以通过拒绝来解决这个问题。因此,您也可以使用promise.reject()代替cancel(promise)

function MyController($scope, $http) {
  var promise =  $http.get('/service');

  promise.success(function(data){

  });

   $scope.$on(
         "$destroy",
         function() {
            promise.reject("scope destroyed, promise no longer available");
         }
   );
}