您如何处理链式承诺的错误
How do you handle errors from chained promises?
我正在构建一个 Angular 应用程序,并且有一个执行 XHR 的工厂,并将承诺返回给调用它的控制器。当我收到错误时,它会在工厂失败方法中捕获,但由于我将其作为承诺返回,它仍然在控制器中调用成功方法。有没有办法让工厂错误传递给控制器失败方法并阻止调用控制器成功方法?原因是我想在客户端正确显示成功和错误通知。我只是完全错了吗?
示例工厂方法:
function add(payload) {
return $http.post('/companies', payload)
.then(success)
.catch(fail);
function success(response) {
return response.data;
}
function fail(error) {
$log.log('Company Factory XHR failed: ', error.data);
}
}
对应控制器方式:
function add(isValid) {
if (isValid) {
var payload = {
company: vm.new_company
};
companyFactory.add(payload)
.then(success)
.catch(fail);
}
function success() {
getCompanies();
vm.new_company = {};
toastrFactory.success("Added company!");
}
function fail(err) {
$log.log('Companies Controller XHR Failed: ' + err.data);
}
}
如果您在控制器中处理承诺,则无需在工厂中处理承诺。
在工厂里,你只想
return $http.post('/companies', payload);
然后处理它,就像你已经在控制器中一样,你就可以开始了。
使用 .then 和 .catch 是承诺的函数,就像你现在在工厂里做的那样,你不是在返回承诺,而是在承诺解决后返回其他东西。你只想单独返回承诺,即 $http.post() 函数。
编辑:为了增加一点深度,这就是我为这种东西设置工厂的方式......
function factory() {
var self = {};
self.addCompany = function(payload) {
return $http.post('/companies', payload);
}
return self;
}
然后在控制器中处理它,例如
factory.addCompany(payload)
.then(function(data) {
console.log('success', data);
})
.catch(function(data) {
console.log('something happened', data);
})
相关文章:
- React JS:未捕获(在承诺中)语法错误:在位置 0 的 JSON 中意外<令牌
- 承诺-如何正确地将错误附加到此示例
- 我能处理来自gap.client.load'的错误吗;的承诺
- $q.reject和处理AngularJS链接承诺中的错误
- 如何在使用替代承诺时解释 ajax 调用中的错误
- 处理角度.js承诺错误状态
- 为什么承诺会捕获语法错误
- Chai正如承诺:当承诺抛出错误时,处理错误
- 如何创建角度承诺中捕获的错误
- JS bluebird承诺错误没有给出任何细节
- 蓝鸟(或其他承诺库)保持承诺错误堆栈跟踪
- 异常捕获在功能上是否与承诺错误回调相同
- 如何在加载文件后将承诺错误传播到更高的承诺级别
- ES6承诺错误处理
- 多个承诺错误(承诺必须通过new构造)
- Nodejs承诺错误的使用
- 承诺错误/异常处理设计
- 处理链条中的承诺错误,是不是太急切了
- AngularJS - Firebase -承诺错误
- 如何正确处理请求-承诺错误