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

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

我所知道的唯一区别是:

 $.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 }); 

还有其他有用的差异吗?

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

但是,由于jQuery有问题的error handling ,除非你从回调函数中返回一个promise,否则你不会注意到这一点,就像在你的例子中那样。 如果您将fail与标准粘附catch调用进行比较,则会出现更多问题。