Si j'ai une fonction qui retourne parfois un objet différé mais parfois un objet non différé. Comment puis-je savoir lequel c'est?
Réponses
Trop de publicités?Selon votre cas d'utilisation, vous pouvez également utiliser jQuery.when
[1]:
Si un seul argument est passé à l'
jQuery.when
et il n'est pas Différé, il sera considéré comme résolu Reportés et tout doneCallbacks joint sera exécuté immédiatement.
Avec jQuery.when
vous pouvez traiter votre objet mystérieux toujours différé:
// x could be a deferred object or an immediate result
var x = getMysteriousObject();
// success will be called when x is a deferred object and has been resolved
// or when x is an immediate result
jQuery.when( x ).then( success, error );
Depuis jQuery Deferreds sont créés en copiant les méthodes d'un objet masqué au lieu d'appeler le nouvel opérateur sur une fonction, vous ne pouvez pas la preuve que l'objet est en effet une instance de jQuery.Différé. Je pense que vous allez avoir besoin d'aller avec le Duck-Typing:
"Quand je vois un oiseau qui marche comme un canard et nage comme un canard et des charlatans comme un canard, j'appelle cet oiseau, un canard." – James Whitcomb Riley
En fonction de quels objets, autrement, pourraient être retourné (quelles propriétés doit être prévu), de vérifier si les propriétés / méthodes sont présents:
var x = getMysteriousObject();
if (x.promise) {
// Deferred
} else {
// Not a deferred
}
Vous pouvez détaillée de cette case si nécessaire:
if ($.isFunction(x.promise)) {
// Deferred
}
ou (pour les distinguer entre Différé des objets et d'autres implémentations de la Promesse de l'interface)
if (x.promise && x.resolve) {
// Deferred
}