从被拒绝的回调

时间:2015-07-09 13:29:30

标签: promise

我不确定我是否正确理解了承诺的某个方面,而且在短暂的Google / SO搜索后我无法找到我想要的内容。

一个已解决的承诺是否可以返回到被拒绝的回调,以后会在链中触发一个已解决的方法?使用jQuery deferreds(以及它已被弃用的pipe方法)作为示例:

x = $.Deferred();

x
  .then(null,function() {
     return $.Deferred().resolve();
  })
  .then(function() {
     console.log('resolved');
  },function() {
     console.log('rejected');
  });

上面的代码,日志rejected,我希望它能够记录resolved,因为第一个错误回调中的Deferred会返回已解析的promise

相反,使用jQuery已弃用pipe方法日志的相同代码,正如我预期的那样resolved

x = $.Deferred();

x
  .pipe(null,function() {
    return $.Deferred().resolve();
  })
  .pipe(function() {
     console.log('resolved');
  },function() {
     console.log('rejected');
  });

我是否在尝试解决拒绝回调中的承诺时想到了什么问题?

1 个答案:

答案 0 :(得分:1)

对于任何遇到过同样思考过程的人,以下页面帮助了我:https://gist.github.com/domenic/3889970

具体来说:

  

...你可以将一个函数的返回值直接输入到另一个函数中,   并继续无限期地这样做。更重要的是,如果在任何时候   该过程失败,组合链中的一个函数可以抛出一个   异常,然后绕过所有其他组成层,直到   它掌握在可以用捕获物处理它的人手中。

似乎jQuery的管道方法违反了Promise的规范。