在自调用setTimeout时苦苦于clearTimeout

时间:2015-01-23 10:45:23

标签: javascript angularjs

我正在尝试每隔5秒查询一次API。我用函数构建查询,然后使用setTimeout()进行5秒重复。但是在我的代码中,另一段代码可以调用我的函数来更新查询字符串,我希望当前超时停止,然后开始新的超时。

(缩小代码,也使用AngularJS)

var timeout;

function queryApi(from, to) {
    var query = '';

    if(angular.isDefined(from) && angular.isDefined(to) {
        // build custom query string
    }
    else {
        // build default query
    }

    $http.get(query).success(function(res) {
        $scope.data = res.data;
    });

    timeout = setTimeout(function() {
        queryApi(from, to);
    }, 5000);
}

function customQuery() {
    // Do logic to get custom from & to dates

    clearTimeout(timeout);
    queryApi(from, to);
}

自定义查询被清除,新的自定义查询每5秒重复一次,但原始查询也会继续进行,为什么?

1 个答案:

答案 0 :(得分:0)

如何在clearInterval(timeout)函数中添加queryApi呢?

var timeout;

function queryApi(from, to) {
    console.log(from + to);
    clearInterval(timeout);
    timeout = setInterval(function() {
        queryApi(from, to);
    }, 1000);
}

queryApi(1,3);
queryApi(5,3);