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
调用进行比较,则会出现更多问题。