【发布时间】:2017-03-17 00:12:12
【问题描述】:
我想在某些 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 请求包装在一个总是返回一个 promise 的 cacheService 中。总之:
return isCachedObject ? $q.resolve(cacheInstance) : return resultat from httpRequest。它可以成为您的选择吗? -
@ÉricRoberge 是的,这将起作用,但希望有一个更优雅的解决方案 :) 也许没有!
-
另一种选择是缓存 httpRequest 的承诺。因此,对同一请求的下一次调用可以绑定到第一次调用的承诺。
-
我相信 Éric 的解决方案是您将获得的最优雅的解决方案。您可以在拦截器中取消请求,当请求被拒绝时,您可以使用 requestError 拦截器返回缓存数据而不是错误。这将在不使用包装器的情况下完成这项工作,但在我看来它不太优雅。