48 votes

Comment puis-je déterminer si un objet jQuery est différé?

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?

54voto

Julian Maicher Points 1105

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

[1] http://api.jquery.com/jQuery.when/

30voto

Niko Points 16715

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
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X