拒绝.然后angularJS承诺链

Rejection in .then angularJS promise chain

本文关键字:承诺 angularJS 然后 拒绝      更新时间:2023-09-26

因此,根据文档(和实践经验;)AngularJS的$q"then"方法返回新的promise(https://docs.angularjs.org/api/ng/service/$q"承诺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链推送拒绝,而不必在每一步都手动拒绝promise。在上面的示例中,如果项加载正常,则预处理的属性设置为true,并激发控制器then()方法上的正确处理程序,但当出现问题并且OtherService.load()的结果被拒绝时,控制器代码中的拒绝处理程序将不会被激发。

有没有办法克服这一点,也许有一种语法可以让拒绝通过?

由于您在错误回调do 中返回作为then调用的一部分返回的promise

 return OtherService.load().then(function(item) {
        item.preprocessed = true;
        return item;
    },
    function(error) {
      return $q.reject(error);
    });

并且错误回调将在控制器上触发。