所以根据文件(和实践经验;))AngularJS的$q
"然后"方法返回新的承诺(https://docs.angularjs.org/api/ng/service/ $ q" Promise API"部分)。
考虑一下这样的代码:
// method somewhere in MyService service
// ...
loadItem = function() {
return OtherService.load().then(function(item) {
item.preprocessed = true;
return item;
});
}
// end of loadItem method
// Somewhere along the controller:
MyService.loadItem().then(function(item) {
// do something with an item...
alert(item.preprocessed);
}, function(error) {
alert('Error!');
})
现在,我想对promise promise值进行一些处理,但与此同时,我希望拒绝被推送到promises链中,而不必在每一步都手动拒绝承诺。
在上面的示例中,如果项目加载好,则preprocessed属性设置为true,并且触发控制器then()
方法上的正确处理程序,但是当出现问题并且OtherService.load()的结果被拒绝时,拒绝控制器代码中的处理程序不会被解雇。
有没有办法克服这个问题,也许有一种语法允许拒绝通过?
答案 0 :(得分:1)
由于您在错误回调中返回作为then
调用的一部分返回的承诺
return OtherService.load().then(function(item) {
item.preprocessed = true;
return item;
},
function(error) {
return $q.reject(error);
});
错误回调会在控制器上触发。