gpt4 book ai didi

javascript - Angular : Default handler for unhandled http errors

转载 作者:可可西里 更新时间:2023-11-01 01:43:17 27 4
gpt4 key购买 nike

在我的 angularjs 应用程序中,我以这种方式为 http 错误定义了一个默认处理程序:

myapp.config([ '$httpProvider', function($httpProvider) {
$httpProvider.responseInterceptors.push('errorInterceptor')
}])

其中 errorInterceptor 是一项服务,它在当前页面顶部的警报字段中显示有关错误的一些详细信息。

现在,当我想以不同的方式处理特定错误时(假设查询是在模态中触发的,我想仅在此模态中而不是在页面级别显示警报):

$http.get('/my/request').then(success, specificErrorHandling)

Angular 执行了 specificErrorHandling 但仍然触发了我的 errorInterceptor,所以我的错误被报告了两次。有没有办法避免这种情况?

更一般地说,是否有一种 Angular 方法可以只处理 promise 链中尚未处理的错误,就像服务器应用程序的顶级错误处理程序没有处理的一样?不必处理捕获的异常?

编辑: 根据 Beetroot-Beetroot 在评论中的要求,这里是我的拦截器的代码:

@app.factory 'errorInterceptor', [ '$q', 'alertsHandler',
($q, alertsHandler) ->
success = (response) ->
response

failure = (response) ->
alertsHandler.raise(response)

(promise) ->
promise.then success, failure
]

最佳答案

我们有类似的东西。

如果我们处理 http 错误,我们会在请求上传递一个名为 errorHandled:true 的属性

$http({
method: 'GET',
url: '/my/url',
errorHandled:true
}).then(function(){ ... }, function(){ ... });

然后在 responseError: function(rejection){ ... } 的拦截中,我们可以通过查看 rejection.config.errorHandled 来查看是否设置了此标志如果没有 - 然后我们弹出一个带有错误的 toastr 对话框。代码看起来像这样

function ( rejection ) { 
if ( !rejection.config.errorHandled && rejection.data.message ){
toastr.error(rejection.data.message, 'Error');
}
return $q.reject(rejection);
}

有人在不添加处理程序的情况下编写“errorHandled:true”的可能性很小。有 2 个错误指示器的机会也很小,因为我们已经习惯了 - 但实际上 2 个指示器总比没有好..

如果我们 promise 查询它是否有错误处理程序或不在 then 链下,那就太好了,但我们无法在任何地方找到它。

关于javascript - Angular : Default handler for unhandled http errors,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17257946/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com