Est-il possible d'ajouter des méthodes à l'objet prometteur de JQuery?

Je souhaite ajouter une méthode de catch à l'objet de promise de JQuery, donc je ne dois pas taper le suivant à chaque fois:

 .then(null,function(data){ // handle error return $.Deferred().resolve().promise(); }); 

De plus, cela facilitera la lecture. Comment faire cela dans JQuery 1.11?

Oui, c'est possible, mais je recommande vivement de ne pas le faire. Utilisez plutôt une bibliothèque de promesses appropriée et assimilez vos promesses jQuery; Afin que vous puissiez utiliser la méthode de compilation bibliothèque (et correcte) .catch() – afin que vous puissiez omettre ce return $.Deferred().resolve().promise(); Également.

Le problème avec l'extension des promesses de jQuery est qu'ils n'héritent pas d'un prototype que nous pourrions simplement modifier, mais utiliser un modèle d'usine (lire la source ). Vous devrez l' décorer :

 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)); 

Franchement, je n'utiliserais pas jQuery "Promises" du tout car elles ne suivent même pas les spécifications. Utilisez la bibliothèque bluebird, par exemple.

Vous pouvez créer votre coutume alors

 $.Deferred().prototype.customthen = function(){ $.Deferred().prototype.then.call(this, null, ,function(data){ // handle error return $.Deferred().resolve().promise(); }) } 

Vous avez ajouté une nouvelle fonction nommée customthen au prototype. Ainsi, cette nouvelle fonction est disponible dans tous les cas.

Maintenant, vous pouvez l'utiliser comme suit

 .customthen();