我想在JQuery的catch
对象中添加promise
方法,所以我不必每次都输入以下内容:
.then(null,function(data){
// handle error
return $.Deferred().resolve().promise();
});
此外,它会使阅读更容易。我将如何在JQuery 1.11中执行此操作?
答案 0 :(得分:4)
是的,有可能,但我强烈建议不要这样做。而是使用适当的promise库并吸收你的jQuery承诺;这样你就可以使用库内置(和正确).catch()
方法 - 这样你就可以省略return $.Deferred().resolve().promise();
行。
扩展jQuery承诺的问题在于它们不会继承我们可以简单修改的原型,而是使用工厂模式(read the source)。您需要decorate:
jQuery.Deferred = (function($Deferred) {
var Deferred = function(func) {
var deferred = $Deferred(func),
promise = deferred.promise();
deferred.catch = promise.catch = function(fnFail) {
return promise.then(null, fnFail);
};
return deferred;
};
return Deferred;
}(jQuery.Deferred));
答案 1 :(得分:0)
坦率地说,我根本不会使用jQuery“Promises”,因为它们甚至没有遵循规范。例如,使用bluebird库。
答案 2 :(得分:-1)
您可以创建自定义然后
$.Deferred().prototype.customthen = function(){
$.Deferred().prototype.then.call(this, null, ,function(data){
// handle error
return $.Deferred().resolve().promise();
})
}
您已向原型添加了名为 customthen 的新功能。因此,这个新功能在所有情况下都可用。
现在,您可以按如下方式使用它
.customthen();