javascript - 停止 AngularJS 中的 $timeout 更新

标签 javascript angularjs

我有2个 Controller ,都使用相同的更新方法来获取数据:

angular.module('project')
  .controller('mainController', function($http, $scope, $timeout, $sce) {
      updateData($http, $scope, $timeout, $sce, false);
  })

  .controller('settingsController', function($http, $scope, $timeout, $sce) {

      updateData($http, $scope, $timeout, $sce, true);          
  })

我的updateData看起来像这样:

function updateData($http, $scope, $timeout, $sce, settings) {
    $timeout(function() {
        if (settings) {

            getSettings($http, $scope);
        }
        else {
            getDataA($http, $scope);
            getDataB($http, $scope);
        }
        updateData($http, $scope, $timeout, $sce, settings);
    }, 1000);
}

现在,当刷新主页(使用 mainController)时,我总是收到“null”消息,因为该过程没有完成所有方法调用,并且当切换到另一个站点时(使用 settingsController )加载它需要很长时间,因为来自前一个请求的所有请求都必须首先完成。刷新/切换站点时如何直接“杀死”所有待处理的更新?

最佳答案

  1. 这个实现是错误的。我认为将依赖项传递给开放函数并使用它们不是一个好主意。这可能会产生难以检测的错误。

  2. 您的 updateData 函数是一个资源 killer 。它每秒重复一次,没有限制或控制。

您的代码存在设计问题。您应该重新考虑以标准且有效的方式设计它。

您的问题的答案是 $timeout 返回一个 promise 。您可以使用 $timeout.cancel 方法取消超时。

var timeoutPromise = $timeout(foo(), 1000);

$timeour.cancel(timoeoutPromise); 

关于javascript - 停止 AngularJS 中的 $timeout 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36197483/

相关文章:

javascript - AMP-HTML页面如何从rails/app/assets/javascript文件夹加载javascript?

javascript - CryptoJS MD5 不转换字数组,SHA256 工作正常

javascript - Reactjs 在特定时间后连续发送 Promise

javascript - 为什么会出现资源加载失败的情况?

javascript - 禁用一个单选按钮上的必需属性

javascript - 为什么我的行不会突出显示? - Angular

javascript - 对于遍历数组不返回正确的结果

html - angularjs中的ng-include和ngroute有什么区别

javascript - Angular : Inherited method extend in the child controller scope

javascript - 属性 Angular 2 的绑定(bind)不会更新具有绑定(bind) ID 的关联输入