离子http请求加载超时
ionic http request loading timeout
每当我执行 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 拦截器文档
requestError
:当前一个拦截器抛出错误或通过拒绝解决时调用拦截器。
responseError
:当前一个拦截器抛出错误或通过拒绝解决时调用拦截器。
编辑以回复评论:
所以如果你想在 responseError
上发出警报而不是添加 $rootScope.$broadcast('response:error')
在 responseError 函数中
然后在您想要发出警报的控制器中执行
$scope.$on('response:error', function(){throw the error here});
你也可以为 requestError
做同样的事情
这是可行的,因为 $broadcast
-- 将事件向下分派到所有子范围
每当我执行 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 拦截器文档
requestError
:当前一个拦截器抛出错误或通过拒绝解决时调用拦截器。
responseError
:当前一个拦截器抛出错误或通过拒绝解决时调用拦截器。
编辑以回复评论:
所以如果你想在 responseError
上发出警报而不是添加 $rootScope.$broadcast('response:error')
在 responseError 函数中
然后在您想要发出警报的控制器中执行
$scope.$on('response:error', function(){throw the error here});
你也可以为 requestError
这是可行的,因为 $broadcast
-- 将事件向下分派到所有子范围