我有以下服务,其中有为我系统的所有仪表板获取数据的功能。

.service('dashboardServices', function ($http, $q) { 
return { 
    getData: getData 
} 
 
//definition of promises and their http requests urls 
var promise01 = $http({method: 'GET', url: urlpromise01, cache: false}); 
var promise02 = $http({method: 'GET', url: urlpromise02, cache: false}); 
var promise03 = $http({method: 'GET', url: urlpromise03, cache: false}); 
 
function getData(){ 
    var promises = []; 
        var promises = $q.all([promise01, promise02, promise03]) 
                            .then(function(data){ 
                                setDashboardData(data[0].data); 
                                setDashboardData(data[1].data); 
                                setDynamicDashboardData(data[2].data); 
                                }) 
        return promises; 
} 
}) 

我在我的 Controller 中调用此服务,以便在从服务器获取数据时打开一个带有加载消息的模式窗口。

.controller('MainCtrl', function($state, $scope, $ionicModal, dashboardServices) { 
$ionicModal.fromTemplateUrl('views/loading.html', { 
    scope: $scope, 
    backdropClickToClose: false, 
    hardwareBackButtonClose: true, 
    animation: 'slide-in-up' 
}).then(function(modal) { 
    $scope.modal = modal; 
}); 
 
$scope.openModal = function() { 
    $scope.modal.show().then(function() { 
        dashboardServices.getData().then(function() { 
            $scope.closeModal(); 
        }) 
    }) 
} 
 
$scope.closeModal = function() { 
    $scope.modal.hide(); 
}; 
}) 

现在我想在请求失败时显示某种消息。因为现在当至少一个请求失败时,加载模式窗口将永远不会关闭。 但我无法在我的 Controller 中添加 .error(function()...

实现这种异常处理的可能方法是什么?

请您参考如下方法:

.then(...).error(...)不仅 $q.all 不支持但是通过 $q promise 和一般 promise 。您可能将它与“错误”回调混淆了,而您正在寻找的是 catch :

$q.all([...]).then(onSuccess).catch(onError); 

这可能是

的另一种形式
$q.all([...]).then(onSuccess, onError); 

但是suited better for readability .或者它可能不是,如果有必要处理来自 all(...) 的错误与链的其余部分分开,在这种情况下它必须是

$q.all([...]).then(onAllSuccess, onAllError).catch(onError); 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!