$ timeout.cancel()没有取消超时

时间:2017-09-20 13:32:23

标签: javascript angularjs timeout

我正在运行3分钟超时,并且在超时时我正在特定持续时间运行另一个功能。但是当我试图取消超时时它仍然在运行并且其中的功能仍在执行中这是我的代码

$scope.time = 180000;
var timer = function() {
    if ($scope.time > 0) {
        $scope.time -= 1000;
        var durations = [170000, 150000, 130000, 110000, 90000, 70000, 50000, 30000, 10000];
        if (durations.includes($scope.time)) {
            dataService.acceptNotify(payload).then(function(response) {
                console.log(response);
                if (response.data.success === true) {
                    $mdToast.showSimple(response.data.msg);
                    $mdDialog.hide();
                    $timeout.cancel(timeout);
                }
            })
        }
        $timeout(timer, 1000);
    } else {
        $mdDialog.hide();
    }
}
var timeout = $timeout(timer, 1000);

3 个答案:

答案 0 :(得分:2)

您只是没有将计时器实例捕获到您的变量中,因此不会取消它。

尝试在代码中更改此行:

$timeout(timer, 1000);

timeout = $timeout(timer, 1000);

答案 1 :(得分:0)

我相信超时正在发生,但你无法观察到它。我看到你使用此代码每隔1秒调用一次函数计时器

var timeout = $timeout(timer, 1000);

但是你在获得响应api之后取消它,同时会有许多实例启动,这会调用很多次。所以实际上它取消了但几次之后。 例如,如果您在20秒内得到响应,那么在调用api 20次后它将被取消,因为您的代码就是这样。 如果您告诉我上面要做什么,我可以帮助您使用正确的代码

答案 2 :(得分:0)

只需删除您正在使用上面的其他代码阻止下面的代码。

$timeout(timer, 1000);

它适用于你。