angularjs – 使用$http拦截器取消请求?

前端之家收集整理的这篇文章主要介绍了angularjs – 使用$http拦截器取消请求?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图找出是否可以使用$http拦截器在甚至发生之前取消请求.

There is a button that triggers a request but if the user double-clicks it I do not want the same request to get triggered twice.

现在,我意识到有几种方法可以解决这个问题,而且我们已经有了一个工作的解决方案,我们把$http包裹在一个服务中,跟踪当前正在等待的请求,并且用相同的方法,url和数据简单地忽略了新的请求.

基本上这是我试图用拦截器的行为:

factory('httpService',['$http',function($http) {

    var pendingCalls = {};

    var createKey = function(url,data,method) {
        return method + url + JSON.stringify(data);
    };

    var send = function(url,method) {
        var key = createKey(url,method);
        if (pendingCalls[key]) {
            return pendingCalls[key];
        }
        var promise = $http({
            method: method,url: url,data: data
        });
        pendingCalls[key] = promise;
        promise.finally(function() {
            delete pendingCalls[key];
        });
        return promise;
    };

    return {
        post: function(url,data) {
            return send(url,'POST');
        }
    }

}])

当我看到$http拦截器的API时,似乎不是一种实现这一点的方法.我可以访问配置对象,但这是关于它.

我试图超越可以在这里使用拦截器的边界,还是有办法呢?

根据 $http documentation,您可以从请求拦截器返回自己的配置.

尝试这样的东西:

config(function($httpProvider) {
    var cache = {};

    $httpProvider.interceptors.push(function() {
        return {
            response : function(config) {
                var key = createKey(config);
                var cached = cache[key];
                return cached ? cached : cached[key];    
            }
        }
    });
}

猜你在找的Angularjs相关文章