Angularjs 截获$http请求并返回响应,无需服务器请求

Angularjs 截获$http请求并返回响应,无需服务器请求,angularjs,http,Angularjs,Http,在某些http请求上,我希望从内存返回数据,而不是让数据击中服务器。我知道我可以编写http拦截器,但我不确定如何实际返回请求的响应 myModule.factory('myHttpInterceptor', function ($q) { return { // optional method 'request': function (config) { // return my data here [200], and stop

在某些http请求上,我希望从内存返回数据,而不是让数据击中服务器。我知道我可以编写http拦截器,但我不确定如何实际返回请求的响应

myModule.factory('myHttpInterceptor', function ($q) {
    return {
        // optional method
        'request': function (config) {
            // return my data here [200], and stop the call from going through
            return config;
        }
    };
});

您可以查看这篇文章:

或者,您可以为
$http
使用缓存参数(请查看更多信息):


这里有一个只使用拦截器的解决方案。我仍然认为评论中的EICS解决方案更为优雅,但是现在你有不同的选择要考虑。
app.factory('myHttpInterceptor', function ($q, myCache) {
    return {
        request: function (config) {
            var cached = myCache.getCachedData(config.params);
            if(cached){
                return $q.reject({cachedData: cached, config: config });
            }
            return config;
        },

        response: function(response){
            // myCache.saveData(response.data);
        },

        responseError: function(rejection) {      
            if(rejection.cachedData){
                return $q.resolve(rejection.cachedData);
            }
            return $q.reject(rejection);
        }
    };
});

我们在工作中所做的是,我们将http请求包装在一个总是返回承诺的缓存服务中。总之:
返回isCachedObject$q、 解析(cacheInstance):从httpRequest返回resultat
。这可能是你的一个选择吗?@爱丽克罗伯格是的,这可能会奏效,但希望有一个更优雅的解决方案:)也许没有!另一种选择是缓存httpRequest的承诺。因此,对同一请求的下一次调用可以绑定到第一次调用的承诺。我相信埃里克的解决方案是您将得到的最优雅的解决方案。您可以在拦截器中取消请求,当请求被拒绝时,您可以使用requestError拦截器返回缓存数据,而不是返回错误。不用包装就可以了,但我认为它不够优雅。谢谢,但我不想用这种方式使用缓存。对于大数据,它会造成瓶颈。所以,请检查第一个链接。
app.factory('myHttpInterceptor', function ($q, myCache) {
    return {
        request: function (config) {
            var cached = myCache.getCachedData(config.params);
            if(cached){
                return $q.reject({cachedData: cached, config: config });
            }
            return config;
        },

        response: function(response){
            // myCache.saveData(response.data);
        },

        responseError: function(rejection) {      
            if(rejection.cachedData){
                return $q.resolve(rejection.cachedData);
            }
            return $q.reject(rejection);
        }
    };
});