我想做以下事情,我有一个像这样的控制器:
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在发生错误时全部停止...我的其他是什么选项?
答案 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
。