拒绝.then angularJS承诺链

时间:2014-10-14 12:43:29

标签: javascript angularjs angular-promise

所以根据文件(和实践经验;))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()的结果被拒绝时,拒绝控制器代码中的处理程序不会被解雇。

有没有办法克服这个问题,也许有一种语法允许拒绝通过?

1 个答案:

答案 0 :(得分:1)

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

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

错误回调会在控制器上触发。