使用时间和取消来中止$ http调用

时间:2016-02-10 16:55:55

标签: angularjs

我有一个允许用户进行搜索并获取数据的应用程序。在每次搜索中,都有 5 $http来自后端获取数据的调用。我为每个$http电话设置5秒超时。

$http.get(url, {timeout: 5000});

此外,我想在用户进行新搜索时中止所有正在进行的$http次呼叫。所以,I can use a canceler

var canceler = $q.defer();
$http.get(url, {timeout: canceler.promise});

$scope.cancel = function(){
    canceler.resolve("ajax aborted");  
}; 

如您所见,用户可以在5s超时之前进行新搜索。那么如何在这里同时使用时间和取消?在AngularJs中我有什么方法可以更容易地做到这一点(中止所有5个$http调用)?

1 个答案:

答案 0 :(得分:1)

为什么不在用户开始新搜索后添加一个可以解决你的取消承诺5000毫秒的超时?

$scope.startSearch = function(){
    $timeout(function() {
        canceler.resolve("time out :(");  
    }, 5000);
};

您可以添加一项检查以查看承诺是否已解决:

// set resolved to false each time you use your $http request
var canceler = $q.defer(), resolved = false;

$scope.cancel = function(){
    if(resolved) return;
    resolved = true;
    canceler.resolve("ajax aborted");
};

$scope.startSearch = function(){
    $timeout(function() {
        if(resolved) return;
        canceler.resolve("time out :(");
        resolved = true;
    }, 5000);
};

或者你可以这样做:

$scope.startSearch = function(){
    stop = $timeout(function() {
        canceler.resolve("time out :(");
    }, 5000);
    canceler.promise.then(function() { stop() });
};