2016-01-29 48 views
0

在我的应用程序中,我有一个通过HTTP承诺获取数据的网格。目前,我可以检测errorCallback秒 - 如下:如何检测所有http GET失败?

myDataPromise.then(function() { 
    //do stuff 
}, function errorCallback(response) { 
     if (response.statusText === "Not Found") { 
      //do stuff 
     }else if(response.statusText === "Internal Server Error"){ 
      //do stuff 
     } 

,但说了SSL错误,其中铬火灾回“ERR ::连接被拒绝:”我不能在此拿起通过读取字符串,我可以与404的等等。真正我想要的是显示一个简单的图像/文本,说明检索一个人的数据时发生错误,无论它是什么。所以如果一个http GET失败根本就是 - 用户知道。这在我看来就像一个相当典型的规格,但我无法在网上找到关于它的很多信息。

+1

你可以使用拦截器检查每个http请求:) –

回答

3

你必须创建一个interceptor

// register the interceptor as a service 
$provide.factory('myHttpInterceptor', function($q, dependency1, dependency2) { 
    return { 
    // optional method 
    'request': function(config) { 
     // do something on success 
     return config; 
    }, 

    // optional method 
    'requestError': function(rejection) { 
     // do something on error 
     if (canRecover(rejection)) { 
     return responseOrNewPromise 
     } 
     return $q.reject(rejection); 
    }, 



    // optional method 
    'response': function(response) { 
     // do something on success 
     return response; 
    }, 

    // optional method 
    'responseError': function(rejection) { 
     // do something on error 
     if (canRecover(rejection)) { 
     return responseOrNewPromise 
     } 
     return $q.reject(rejection); 
    } 
    }; 
}); 

$httpProvider.interceptors.push('myHttpInterceptor'); 


// alternatively, register the interceptor via an anonymous factory 
$httpProvider.interceptors.push(function($q, dependency1, dependency2) { 
    return { 
    'request': function(config) { 
     // same as above 
    }, 

    'response': function(response) { 
     // same as above 
    } 
    }; 
}); 

拦截器拦截所有$ http流量。即使你正在加载模板。

+0

这将被称为?我无法看到这将如何适应我的应用按钮功能(它在服务中执行“GET”功能,并返回单个或一组承诺)。如果这是有道理的?我会在哪里调用这些函数? – xeon48

+1

您只需将此拦截器添加到您的应用程序中即可。每个http请求和响应都会通过这个拦截器。如果您收到响应错误,拦截器将执行“responseError”函数。你可以通过发布一个事件来处理这个事件,以便你可以在别的地方处理它。 – com2ghz

+0

是啊,它的工作,哇,这是一个惊人的功能!谢谢你的帮助! – xeon48