【发布时间】:2015-05-05 03:43:08
【问题描述】:
我需要将必要的 HMAC 标头附加到请求中。这应该不是很困难,但是我开始感到沮丧。以下代码有什么问题。我正在做的实际http调用有效;我自己运行了这个调用,它返回了必要的数据。它在拦截器内部不起作用。
我只想让当前的实现工作,然后再为这个拦截器添加白名单或黑名单以及其他可自定义的数据。然而,这不是关于 hmac 的问题,而是关于 Promise 的问题。
这个拦截器的错误在于整个承诺行从 $http(...) 开始。当我删除此块并按原样使用它(减去承诺执行)时,它工作正常。一旦我取消注释该行,它就会陷入循环并崩溃 chrome。我读过的所有地方都说这是这样做的,但这显然行不通。
function requestInterceptor(config){
var $http = $injector.get('$http');
var deferred = $q.defer();
$http.get(hmacApiEndpoint, {cache: true}).then(function(data){
console.log('HMAC - Success', data)
deferred.resolve(config)
}, function(config){
console.log('HMAC - Error', config)
deferred.resolve(config)
})
return deferred.promise;
}
return {
request: requestInterceptor
};
这是否与 angulars $http promise 与 '$q' 的实现不同这一事实有关?
【问题讨论】:
-
从请求
requestInterceptor调用的$http会再次调用requestInterceptor吗?我怀疑它会递归调用它 -
@pankajparkar,我几乎可以肯定它会......所以,为了避免无限循环,你应该只将拦截器应用于
hmacApiEndpoint以外的网址。并且$http返回相同的承诺 + 和附加的.success/.error- 所以,它是相同或兼容的
标签: javascript angularjs angular-promise angular-http-interceptors