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功能或承诺链接,因为即使第一承诺失败我想第二个继续。

我不知道如何管理运行所有承诺,无论他们是否全部失败,只显示一个错误横幅。如果我只显示一个错误横幅,则其他错误消息可能不会显示(防止显示多个错误横幅)。

如果只显示一个,则可用性会更好。

+0

使用像'hasErrorShown'自定义布尔标志,并只有'showErrorBanner'如果该标志设置为false。 –

+1

在您的showErrorBanner()函数中,您可以首先检查横幅是否显示/存在,然后处理它,但不要实例化两个横幅,只创建一个并显示/隐藏它,或者检查是否存在,标志或检查DOM – Ferus7

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])


希望这将有助于你