即使返回状态401,AngularJS等待所有异步调用完成?

时间:2014-12-14 10:12:16

标签: ajax angularjs promise angular-promise

我想做以下事情,我有一个像这样的控制器:

  dashboardService.getDashboardStateLakes().then(function (result) {
            if (result) {
                dosomething();
        }, function (err) {
            //TODO: handle error;
            //alert(err);
            throw new Error(err);
        });

        // populate dashboard lakes status (left upper of the screen)
        dashboardService.getDashboardLakesStatus().then(function (result) {
            if (result) {
                dosomething();
            }
        }, function (err) {
            //alert(err);
            //throw new Error(err);
        });

在服务中它正在这样做:

 this.getDashboardLakesStatus = function () {
        var deffered = $q.defer();
        $http.get(api.GET_dashboardLakesStatus)
            .success(function (result) {
                //logic
                deffered.resolve(result);
            })
             .error(function (data, status) {
                //logic
                deffered.reject(status);
        return deffered.promise;
    };

现在我想要的是在两个ajax调用完成后做一些事情,但问题是,有时候,401正在回来(故意)和$ q在发生错误时全部停止...我的其他是什么选项?

1 个答案:

答案 0 :(得分:3)

Promise异常处理类似于同步代码中的try / catch。您可以通过从恶劣状态恢复来解决承诺:

$http.get(api.GET_dashboardLakesStatus).catch(function(e){ });// always resolved

请注意,此get调用的结果将是实际响应,如果出现错误,则为undefined。即使其中一些调用失败,这也会让您$q.all几个调用。

另外,请注意您拥有deferred anti pattern。在使用已经返回promise的API时,您不必创建延迟。考虑使用.then.catch支持.success.error