我正在编写一个Angular 1.5.3应用程序。在我的主“主页”控制器上,我使用$ http调用2个不同的端点。这两个端点彼此不相关并且具有单独的数据等。我遇到的一个问题是如果这两个端点都有错误,那么我的用户将看到2个错误消息。消息可能相同或不同(例如有时没有互联网连接)。
FirstService.request()
.then(handleFSSuccess)
.catch(handleError);
SecondService.request()
.then(handleSSSuccess)
.catch(handleError)
function handleError(error) {
ErrorService.showErrorBanner(error);
}
我无法使用$ q.all功能或承诺链接,因为即使第一个承诺失败,我希望第二个承诺继续。
我不确定如何管理所有承诺,无论它们是一个还是全部失败,并且只显示一个错误横幅。如果我只显示一个错误标题,则可能不会显示其他错误消息(防止显示多个错误标题)。
如果只显示一个,那么可用性更好。
答案 0 :(得分:1)
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])
希望它能帮到你