如何在AngularJS的$ q中处理单个404

时间:2014-07-08 17:26:15

标签: angularjs promise

我使用$ q.all([prmiseA,promiseB])将一对链接$ http与单个$ http结合使用。一切都工作正常,我得到了数据,错误处理没有问题。

除了偶尔在特定的http呼叫上找不到数据并且这不是错误。

我正在使用服务将逻辑与UI分开。我的电话看起来像这样

$scope.Loading = true;
var p = Service.Call(Param1, Param2);
p.then(function () {
    $scope.Loading = false;
}, function (reason) { 
    $scope.Loading = false;
    $scope.alerts.push({ msg: "Error loading information " + Param1, type: "danger" });
})

我希望能够做的是处理' Service.Call'中的一个网址上的404。功能。因此上面的UI代码保持不变。

我的问题是,如果我向可能返回404的特定调用添加错误处理程序。那么所有错误都会被处理掉#34;所以我为这一个电话丢失了错误。

有没有办法重新加入"在$ q?

1 个答案:

答案 0 :(得分:5)

  

有没有办法在$ q中“重新加注”?

是的,您可以通过从处理程序返回被拒绝的承诺来重新抛出:

return $q.reject(new Error("Re Thrown")); // this is an actual `throw` in most
                                          // promise implemenentations

如果$http调用404不是错误,您可以从中恢复。承诺的一个很酷的功能是我们可以从错误中恢复:

var makeCallAndRecover(url){
    return $http.get(...).catch(function(err){
        // recover here if err is 404
        if(err.status === 404) return null; //returning recovery
        // otherwise return a $q.reject
        return $q.reject(err);
    }); 
}