AngualrJS - 如何使用多个http错误消息管理可用性?

时间:2017-09-06 08:03:45

标签: angularjs error-handling promise usability

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

我不确定如何管理所有承诺,无论它们是一个还是全部失败,并且只显示一个错误横幅。如果我只显示一个错误标题,则可能不会显示其他错误消息(防止显示多个错误标题)。

如果只显示一个,那么可用性更好。

1 个答案:

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

希望它能帮到你