请参阅下面我的角度应用程序的结构:
我有一个名为'firm.html'的页面,其中包含一个按钮。单击此按钮将执行以下代码。
控制器
控制器调用服务功能。在{ng-show中使用generationInProgress
变量来切换HTML页面上加载gif的可见性
$scope.generationInProgress = true;
firmService.processFirm(firmRequest).then(function(response) {
window.location.href = "firm/process";
$scope.generationInProgress = false;
});
公司服务
这是一个使用上面提到的以下函数处理Firm操作的服务
this.processFirm = function(firmRequest) {
return httpService.put('firm/process', firmRequest);
};
HTTP服务
这是一项处理所有服务调用的服务。它由多个服务使用,包括上面的firmService。以下是上面提到的put
方法
this.put = function(url, data) {
return promise = $http.post(url, data).success(function(response) {
return response;
}).error(function(response) {
console.log("error");
});
};
如果服务器返回HTTP错误代码,显然会执行.error
函数。如果我有专门的错误页面,我可以重定向到该页面。
但是,我需要在'firm.html'页面上显示错误,同时将$scope.generationInProgress
设置为false,以便不再显示加载的gif。执行此操作的代码都不能位于httpService中,因为它是许多不同组件使用的常用服务。
我不确定如何将错误传播回控制器以实现此目的。我只是将return response;
放在.success
和.error
中,并在控制器中使用IF语句来测试HTTP代码吗?有替代方法吗?
感谢任何建议。
答案 0 :(得分:1)
已弃用.success
和.error
方法。相反,请使用.then
和.catch
方法。
将成功的承诺return
数据链接到.then
方法。要链接被拒绝的承诺,throw
错误响应:
this.put = function(url, data) {
//Use .then method
return promise = $http.post(url, data).then(function(response) {
//return to chain success
return response;
//Use .catch method
}).catch(function(response) {
console.log("error");
//throw to chain rejection
throw response;
});
};
来自文档 1 :
弃用通知
已弃用
$http
遗留承诺方法.success
和.error
。改为使用标准.then
方法。
答案 1 :(得分:0)
您可以在控制器中处理被拒绝的状态,而不是在html中显示它。
$scope.generationInProgress = true;
$scope.error = "";
firmService.processFirm(firmRequest).then(function(response) {
window.location.href = "firm/process";
$scope.generationInProgress = false;
}, function(err) {
$scope.generationInProgress = false;
$scope.error = "Your customized error message. Caused by: " + err;
});