从这个有用的answer查看此AuthInterceptor
,返回的JSON对象中如何使用request
和response
密钥?
此外,return config || $q.when(config)
的含义是什么?我了解如果config
为null
或undefined
,但$q.when(config
)在此代码中的含义是什么,则会返回第二部分?
myApp.factory('AuthInterceptor', function ($window, $q) {
return {
'request': function(config) {
config.headers = config.headers || {};
if ($window.sessionStorage.getItem('token')) {
config.headers.Authorization = $window.sessionStorage.getItem('token');
}
return config || $q.when(config);
},
'response': function(response) {
if(response.status === 401) {
$location('/login');
}
return response || $q.when(response);
}
};
});
我输入了以上链接的答案。它对我有用,但我不明白它是如何使用的。
答案 0 :(得分:1)
request
和response
很容易用作中间人。换句话说,request
函数在请求之前(请求之后)运行,response
函数在处理请求结果之前运行。
$q.when()
确保返回值能够作为promise处理。从本质上讲,它将值包含在promise中,以便像returnedValue.then()
这样的函数可以工作。
请参阅:https://docs.angularjs.org/api/ng/service/$q
凯文问你为什么要使用$q.when()
。这是为了确保任何消耗这个功能的外部函数都能获得一个承诺,如果期望的那样。例如,假设您调用一个期望承诺的函数的情况:
someThirdPartyFunc(someArg).then(function(result){
// do somethign with result
});
如果你运行了这个并且someThirdPartyFunc
返回了一个简单的值(比如100),那么这显然会失败。如果实现者将返回值包装在$q.when(100)
中,那么上面的函数调用将是有效的,而result
将包含值100。
答案 1 :(得分:1)
注册$http
拦截器时,基本上应该使用以下(可选)键传递一个对象:request,requestError,response,responseError。
有关何时调用每个拦截器功能的更多信息,请查看 this answer 。
$q.when()
将任何JS对象转换为promise(使用传入的对象作为每个已解析的值立即解析)。但是,坦率地说(尽管我已经看过很多)我不明白为什么人们需要返回config || $q.when(config)
,而不仅仅是config
。