取消已超时运行的函数

时间:2016-09-16 21:32:53

标签: angularjs

我有以下代码。它会检查每隔几分钟轮询服务器的工厂。它工作正常,但我想在打开模态时暂停“fetchDataContinously”方法,并在模态关闭时恢复它。简而言之,我需要找到一种方法来打开和关闭模态的“fetchDataContinously”。如果我的问题不明确,请告知或告诉我。

    angular.module('NavBar', []).controller('NavBarCtrl', function NavBarCtrl($scope,$modal,$timeout,MyPollingService) {

    var ctrl = this;
    fetchDataContinously ();

    function fetchDataContinously () {
        MyPollingService.poll().then(function(data) {


        if(data.response[0].messages[0].important_popup){
          ctrl.showImportantNotice(data.response[0].messages[0]);
          return;
        }
        $timeout(fetchDataContinously, 3000);
        });
    }
    ctrl.showNotices = function () {
        var noticesModalOptions = {
            templateUrl: "notices.html",
            controller: "NoticesCtrl",
            controllerAs: "ctrl",
            show: true,
            scope: $scope,
            resolve: {
                notices: function(NoticesFactory) {
                    return NoticesFactory.getMessages();
                }
            }
        }

      var myNoticesModal = $modal(noticesModalOptions);
      myNoticesModal.$promise.then(myNoticesModal.show);
    }

   ctrl.showImportantNotice = function (importantNotice) {
    ctrl.importantNotice = importantNotice; 
    var importantNoticeModalOptions = {
        templateUrl: "/importantNotice.html",
        controller: "ImportantNoticeCtrl",
        controllerAs: "ctrl",
        show: true,
        scope: $scope,
        onHide: function() {
            console.log("Close !");
            fetchDataContinously();
        },
        onShow: function() {
            console.log("Open !");
        }
    }

  var myImportantNoticeModal = $modal(importantNoticeModalOptions);
  myImportantNoticeModal.$promise.then(myImportantNoticeModal.show);
}

})

1 个答案:

答案 0 :(得分:2)

$timeout包含在函数中并返回其承诺

var timer;
function startPolling(){
   return $timeout(pollData, 3000);
}
// start it up
timer = startPolling();

取消:

$timeout.cancel(timer);

然后重新开始:

timer = startPolling();