AngualrJS - 如何管理多个http错误消息的可用性?
问题描述:
我正在写一个Angular 1.5.3应用程序。在我的主'主页'页面控制器上,我使用$ http调用2个不同的端点。这两个端点彼此不相关,并且具有单独的数据等。我遇到的一个问题是,如果这两个端点都有错误,那么我的用户将看到2个错误消息。信息可能相同也可能不相同(例如,有时没有互联网连接)。AngualrJS - 如何管理多个http错误消息的可用性?
FirstService.request()
.then(handleFSSuccess)
.catch(handleError);
SecondService.request()
.then(handleSSSuccess)
.catch(handleError)
function handleError(error) {
ErrorService.showErrorBanner(error);
}
我不能使用$ q.all功能或承诺链接,因为即使第一承诺失败我想第二个继续。
我不知道如何管理运行所有承诺,无论他们是否全部失败,只显示一个错误横幅。如果我只显示一个错误横幅,则其他错误消息可能不会显示(防止显示多个错误横幅)。
如果只显示一个,则可用性会更好。
答
FirstService.request()
和SecondService.request()
都返回Promise,并且您用then
/catch
解决。
我会用新的Promise包装它,即使发生故障也能解决它们。例如:
var deferred = $q.defer();
FirstService.request().then(function(_response){
deferred.resolve(_response.data);
}).catch(function(error){
deferred.resolve({error:error}); // here we do not reject but pass error to resolve
});
return deferred.promise;
所以,现在你可以使用$q.all
,你将只能得到解决数据,或对象或错误对象。
在一个地方,你可以通过过滤误差关键数据(因为你[RES1,RES2])
希望这将有助于你
使用像'hasErrorShown'自定义布尔标志,并只有'showErrorBanner'如果该标志设置为false。 –
在您的showErrorBanner()函数中,您可以首先检查横幅是否显示/存在,然后处理它,但不要实例化两个横幅,只创建一个并显示/隐藏它,或者检查是否存在,标志或检查DOM – Ferus7