2015-09-16 53 views
1

我想要一个通用的服务,将运行我的http请求,并提供成功和错误功能的占位符。这里是我的代码:角承诺 - 提供捕获功能

var deferred = $q.defer(); 
var response = $http({ 
    .............. 
}); 
response.then(function (data) { 
     deferred.resolve(data.data); 
}); 
response.catch(function (data) { 
     alert('Error'); 
}); 

并在控制器:

service.executeHTTPCall('parameters').then(successHandler); 

我的问题是如何提供一个executeHTTPCall调用一个错误处理程序?

感谢

回答

3

好,避免explicit construction和东西落入地方:

// no deferred, just return 
return $http({..... }).then(function(data){ 
    // handle successes 
    return data.data; 
}, function(err){ // handle failures here 
    alert("ERrror!!!"); // logic here 
    return $q.reject(err); // this is important, like a `catch and throw` 
          // to signal we're still handling errors. 
}); 

但是,我可以建议http interceptors呢?

$httpProvider.interceptors.push(function($q, dependency1, dependency2) { 
    return { 
    'response': function(response) { 
     // do something on success 
    }, 
    'responseError': function(rejection) { 
     // do something on failure, see docs for more usage examples here 
    }; 
}); 

这将意味着你可以避免手动包装每一个$ http诺言,也可以在测试中更好地发挥。

+0

我从来没有做过http拦截器。我可以要求一个例子吗? – Mark

+0

我链接到答案中的一个,在这里:https://docs.angularjs.org/api/ng/service/$http#interceptors –

+0

我已经将我的服务修改为您没有推迟的建议。好像我正在获取服务成功的数据。但是当我打电话给我的服务时,我没有深入到成功功能中,就像我在原始代码中显示的一样。 – Mark