javascript - Angular Promise 能活多久?

标签 javascript angularjs

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

假设我有一个使用 http 服务的 Controller :

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

问题是这个 Controller 可能附加到一个 View 。如果 View 已被删除,我想确保响应被丢弃,这是为了防止与可能在应用程序的其他部分触发的其他请求发生冲突。如果 View 被删除, Controller 的实例是否会被销毁并随之取消来自 $http 服务的未决调用?例如,当用户离开页面(没有重新加载)时导致新部分的 Javascript 呈现?

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

最佳答案

首先,附加对您的 promise 的引用,然后将该引用传递给 cancel 函数。这解决了拒绝的 promise 。所以你也可以只使用 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");
         }
   );
}

关于javascript - Angular Promise 能活多久?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22003861/

相关文章:

angularjs - Grails 3 Asset 插件未添加 *.tpl.html 文件

javascript - AngularJS 指令的 link() 函数中的 DOM 元素未准备好

javascript - 将节点添加到 d3js 中现有的集群力布局

javascript - 页面上的多个并发 iframe

java - 在 javascript 调用函数中,同时必须调用 java 函数

javascript - 使用不同的 Controller 检索另一个页面上的选择选项

javascript - 使用 ng-click 自动传递 $event?

javascript - 检查长度,然后检查值是否仅为数字-JavaScript

javascript - 'lazy scroll' 是否存在?

javascript - 如何在 ng-table 中使用正则表达式进行过滤?