离子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 中发出警报来通知用户。

问题 如何实现警报以通知用户已发生的错误?

尝试像这样添加 responseErrorrequestError

 responseError: function(responseError) {
                $rootScope.$broadcast('loading:hide')
                return responseError

然后用 requestError 再做一次, 这是来自 angular http 拦截器文档

requestError:当前一个拦截器抛出错误或通过拒绝解决时调用拦截器。

responseError:当前一个拦截器抛出错误或通过拒绝解决时调用拦截器。

编辑以回复评论:

所以如果你想在 responseError 上发出警报而不是添加 $rootScope.$broadcast('response:error')

在 responseError 函数中

然后在您想要发出警报的控制器中执行

$scope.$on('response:error', function(){throw the error here});

你也可以为 requestError

做同样的事情

这是可行的,因为 $broadcast -- 将事件向下分派到所有子范围