暂停角度间隔,然后恢复

r2g*_*get 11 intervals angularjs

我有一个功能,我每10秒重复一次.这很好用.它显示订单.现在我想要一个接受订单功能.但是当点击它时我想要暂停间隔.当接受订单返回时,我想再次恢复此间隔.

做这个的最好方式是什么?

我的代码

    if ($auth.isAuthenticated()) {
    //request
    $scope.checkNewOrders = function (){
        newOrderService.getNewOrders().then(function (response) {
            //console.log(response.data.status);
            if (response.data == 'token_error') {
                $auth.logout();
            }

            if (response.data.status == 'success') {
                $rootScope.openOrders = response.data.data;
            }

            if (response.data.status == 'no_orders') {
                $rootScope.openOrders = false;
            }
        });
    };

    //Put in interval, first trigger after 10 seconds
    $interval(function(){
        $scope.checkNewOrders();
    }.bind(this), 10000);

    //invoke initialy
    $scope.checkNewOrders();
}

$scope.acceptOrder = function(orderid) {
    console.log(orderid);
}
Run Code Online (Sandbox Code Playgroud)

Joy*_*Joy 9

你应该创建一个变量$interval:

var timer = null;
$scope.checkNewOrders = function (){ ...

timer = $interval(function(){
    $scope.checkNewOrders();
}.bind(this), 10000);
Run Code Online (Sandbox Code Playgroud)

然后在click函数里面,cancel定时器:

$scope.acceptOrder = function(orderid) {
    $interval.cancel(timer);
    timer = null;
}
Run Code Online (Sandbox Code Playgroud)

更新完成后,恢复:

newOrderService.getNewOrders().then(function (response) {
     if (timer === null) {
         timer = $interval(function(){
             $scope.checkNewOrders();
         }.bind(this), 10000);
     }
     ...
Run Code Online (Sandbox Code Playgroud)

  • 应该注意:这不会暂停间隔并从中断处继续.它取消原始间隔,然后从头开始再次启动. (3认同)