检测到 $q.all 的错误
detection of error for $q.all
我有以下服务,其中有为我系统的所有仪表板获取数据的功能。
.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;
}
})
我在我的控制器中调用此服务,以便在从服务器获取数据时打开带有加载消息的模态 window。
.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();
};
})
现在我想在请求失败时显示某种消息。因为现在当至少一个请求失败时,加载模式 window 将永远不会关闭。
但我无法在我的控制器中添加 .error(function()... =]
实施此异常处理的可能方法是什么?
alertServices.getData().then(function() {
$scope.closeModal();
}, function(reason) {
// handle the error
});
.then(...).error(...)
不仅受到 $q.all
的支持,而且受到 $q
承诺和一般承诺的支持。您可能将它与 'error' 回调混淆了,而您正在寻找的是 catch
:
$q.all([...]).then(onSuccess).catch(onError);
这可能是
的另一种形式
$q.all([...]).then(onSuccess, onError);
但 suited better for readability。或者它可能不是,如果有必要与链的其余部分分开处理来自 all(...)
的错误,在这种情况下它必须是
$q.all([...]).then(onAllSuccess, onAllError).catch(onError);
我有以下服务,其中有为我系统的所有仪表板获取数据的功能。
.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;
}
})
我在我的控制器中调用此服务,以便在从服务器获取数据时打开带有加载消息的模态 window。
.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();
};
})
现在我想在请求失败时显示某种消息。因为现在当至少一个请求失败时,加载模式 window 将永远不会关闭。 但我无法在我的控制器中添加 .error(function()... =]
实施此异常处理的可能方法是什么?
alertServices.getData().then(function() {
$scope.closeModal();
}, function(reason) {
// handle the error
});
.then(...).error(...)
不仅受到 $q.all
的支持,而且受到 $q
承诺和一般承诺的支持。您可能将它与 'error' 回调混淆了,而您正在寻找的是 catch
:
$q.all([...]).then(onSuccess).catch(onError);
这可能是
的另一种形式$q.all([...]).then(onSuccess, onError);
但 suited better for readability。或者它可能不是,如果有必要与链的其余部分分开处理来自 all(...)
的错误,在这种情况下它必须是
$q.all([...]).then(onAllSuccess, onAllError).catch(onError);