我今天发现,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
});
还有其他有用的差异吗?
答案 0 :(得分:0)
是的,它们之间的区别在于.fail()
确实返回了它被调用的原始承诺,而.then()
确实构造了一个可能以不同值解析的新承诺。
但是,由于jQuery's problematic error handling,除非您从回调中返回承诺,否则您将不会注意到这一点,就像您在示例中所做的那样。如果您将fail
与标准附加的catch
调用进行比较,则会出现更多问题。