2015-04-02 76 views

回答

0

你可以检查您是否在线或者通过阅读在你的拦截器的响应的状态,如果其501分之401的/ etc:

var interceptor = ['$rootScope', '$q', function ($rootScope, $q) { 
    function success(response) { 
     return response; 
    } 
    function error(response) { 
     var status = response.status; // error code 
     if ((status >= 400) && (status < 500)) { 
     $rootScope.broadcast("AuthError", status); 
     return; 
     } 
     if ((status >= 500) && (status < 600)) { 
     $rootScope.broadcast("ServerError", status); 
     return; 
     } 
     // otherwise 
     return $q.reject(response); 
    } 
    return function (promise) { 
     return promise.then(success, error); 
    } 
}] 

还有另外一种方式,使用HTML5,但我猜在某些浏览器上不起作用。这是使用navigator.onLine属性来实现,如:

if (navigator.onLine) { 
    //I'm online 
} else { 
    I'm not online 
} 

https://developer.mozilla.org/en-US/docs/Web/API/NavigatorOnLine/onLine

0

如果你把你的请求拦截器内的对象,这将触发对responseError拦截通话,传递扔对象作为其论据。

你必须找到一个方法通知responseError拦截器,这不是一个真正的错误,它应该返回一个自定义的响应。

的responseError拦截器可以选择恢复错误返回响应对象o失败返回拒绝承诺(查看角的$ HTTP拦截文档)

编辑:如果您的请求Interceptor抛出一个对象,你不能避免控制台中的错误消息。最好是返回一个被拒绝的promise传递配置对象作为值,并在其中放置额外的信息,以便responseError检测特殊情况。