我使用以下显示加载屏幕每当我执行一个http请求,但有时如果有一个错误,那么它将保持加载(因为背景应用程序变得不可用)。而不是隐藏它在每个错误检查,我想知道是否有可能调用超时5秒后?
.config(function($httpProvider) {
$httpProvider.defaults.timeout = 5000;
$httpProvider.interceptors.push(function($rootScope) {
return {
request: function(config) {
$rootScope.$broadcast('loading:show')
return config
},
response: function(response) {
$rootScope.$broadcast('loading:hide')
return response
}
}
})
})
根据Jess的回答,现在看起来像这样:
.config(function($httpProvider) {
$httpProvider.defaults.timeout = 5000;
$httpProvider.interceptors.push(function($rootScope) {
return {
request: function(config) {
$rootScope.$broadcast('loading:show')
return config
},
response: function(response) {
$rootScope.$broadcast('loading:hide')
return response
},
responseError: function(response) {
$rootScope.$broadcast('loading:hide')
return response
},
requestError: function(response) {
$rootScope.$broadcast('loading:hide')
return response
}
}
})
})
然而,我似乎无法在requestError
中放置警报来通知用户。
如何实现警报以通知用户已发生的错误?
尝试像这样添加responseError
和requestError
:
responseError: function(responseError) {
$rootScope.$broadcast('loading:hide')
return responseError
,并对requestErro
r重复此操作,这是来自angular的http拦截器docs
requestError
:当前一个拦截器抛出错误或被拒绝解决时,拦截器被调用。
responseError
:当前一个拦截器抛出错误或解析为拒绝时,将调用拦截器。
编辑回复评论:
所以如果你想在responseError
上抛出一个警告,那么添加一个$rootScope.$broadcast('response:error')
中的responseError函数
然后在你想要抛出警报的控制器中输入
$scope.$on('response:error', function(){throw the error here});
您也可以对requestError
这个可以工作,因为$broadcast
——向下分派事件到所有子作用域