JQuery中Deferred.then(null,func)和Deferred.fail(func)之间的差异?

时间:2015-06-08 21:11:27

标签: javascript jquery promise

我今天发现,Deferred.then(null,func)Deferred.fail(func)在JQuery中并不是同一回事。在ES6的承诺中,Promise.then(null,func)Promise.catch(func)是相同的,所以我对JQuery的功能感到困惑。

我所知道的唯一区别是:

$.Deferred().reject().promise()
  .fail(function(){
    return $.Deferred().resolve().promise();
  })
  .then(function(){
    console.log('fail caught error'); // NOT printed
  });

$.Deferred().reject().promise()
  .then(null,function(){
    return $.Deferred().resolve().promise();
  })
  .then(function(){
    console.log('then caught error'); //printed
  });

还有其他有用的差异吗?

1 个答案:

答案 0 :(得分:0)

是的,它们之间的区别在于.fail()确实返回了它被调用的原始承诺,而.then()确实构造了一个可能以不同值解析的新承诺。

但是,由于jQuery's problematic error handling,除非您从回调中返回承诺,否则您将不会注意到这一点,就像您在示例中所做的那样。如果您将fail与标准附加的catch调用进行比较,则会出现更多问题。