angularjs – 在本地处理Angular $http错误,并回退到全局错误处
发布时间:2020-12-17 17:21:24 所属栏目:安全 来源:网络整理
导读:我有一个基于组件的Angular应用程序,其中各个组件加载它们各自的数据.发生错误时,我通常希望组件显示错误消息. 但是,在某些情况下,我希望组件忽略错误,并将其留给一些全局错误处理机制来捕获它. 拦截器: angular.module("...").factory("httpInterceptor",f
我有一个基于组件的Angular应用程序,其中各个组件加载它们各自的数据.发生错误时,我通常希望组件显示错误消息.
但是,在某些情况下,我希望组件忽略错误,并将其留给一些全局错误处理机制来捕获它. 拦截器: angular.module("...").factory("httpInterceptor",function($q) { return { responseError: function(response) { // (1) return $q.reject("I AM CALLED FIRST") } }) Serivce: angular.module("...").service("myService",function($http){ return { fetchData: function(){ return $http.get("...") } } }) 控制器: angular.module("...").controller("MyController",function(myService){ myService.fetchData() .then(function(){ ... }) .catch(function() { // (2) //I AM CALLED LAST }) }) 在大多数情况下,我希望在控制器中处理错误(在第(2)点).如果控制器决定忽略错误(省略catch),则仍然可以在拦截器中捕获错误. 问题是拦截器不知道控制器是否打算捕获错误,因为它是在控制器之前调用的.因此拦截器不知道它是否应该显示错误(我不想要全局和本地错误消息). 如何捕获控制器忽略的http错误? 解决方法
由于承诺不知道派生承诺的事情,似乎没有办法让它美丽与$http,拦截器和承诺.
但是如果你需要一个丑陋的方式: $httpProvider.interceptors.push(['$q','$timeout',function ($q,$timeout) { return { responseError: function (response) { $timeout(function () { if (response.errorHandled) { return; } // global AJAX error handling },0); return $q.reject(response); } }; } ]); 然后在.catch()中的某个地方: .catch(function(response){response.errorHandled = true;}) (我想我之前在SO上看到了这样的答案,但我找不到它.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |