Se ho una funzione che a volte restituisce un oggetto posticipato ma a volte un oggetto non differito. Come posso sapere quale è?Come posso determinare se un oggetto jQuery è differito?
risposta
A seconda del caso d'uso, si potrebbe anche usare jQuery.when
[1]:
Se un singolo argomento viene passato alla
jQuery.when
e non è una differita, si sarà trattato come un risolta differite e tutti i ritirati allegati saranno eseguiti immediatamente.
Con jQuery.when
è possibile trattare il misterioso oggetto sempre come differito:
// 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);
Risposta molto utile, grazie! – nrodic
il tuo gestore "success" non avrà potenzialmente altri argomenti passati, a seconda che l'oggetto sia differito o meno? Nel qual caso dovrai ancora usare la digitazione anatra come suggerito di seguito. – backdesk
@Crungmungus: "Se un singolo argomento viene passato a jQuery.when e non è un rinviato o una promessa, verrà considerato come un rinviato risolto e tutti i callback eseguiti verranno immediatamente eseguiti. " –
Poiché jQuery Deferred viene creato copiando i metodi di un oggetto nascosto anziché chiamare il nuovo operatore su una funzione, non è possibile provare che l'oggetto sia effettivamente un'istanza di jQuery.Deferred. Penso che tu avrai bisogno di andare con Duck-Typing:
"Quando vedo un uccello che cammina come un'anatra e nuota come un'anatra e fa qua qua come un'anatra, che io chiamo quell'uccello un'anatra." - James Whitcomb Riley
A seconda di quali oggetti potrebbero altrimenti essere restituiti (quali proprietà deve essere previsto), verificare se particolari proprietà/metodi sono presenti:
var x = getMysteriousObject();
if (x.promise) {
// Deferred
} else {
// Not a deferred
}
È possibile dettagliato questo controllo, se richiesto :
if ($.isFunction(x.promise)) {
// Deferred
}
o (per distinguere tra oggetti anticipate e altre implementazioni dell'interfaccia promessa)
if (x.promise && x.resolve) {
// Deferred
}
Ok, allora penso che battere a macchina è il modo migliore per andare. Ero preoccupato di ottenere una quaglia invece di un'anatra. Ora pensa che non sia così importante. Grazie molto! – WawaBrother
Ispirato da Niko's answer, ho creato un'altra implementazione che avrebbe controllare se un oggetto è un differita in base al nome delle sue proprietà ma anche sul contenuto di tali proprietà. Dovevo farlo perché un altro mio oggetto aveva una proprietà chiamata promessa.
if (typeof value.resolve !== "function") {
return false;
}
return String(value.resolve) === String($.Deferred().resolve);
- 1. .NET: come determinare se un oggetto è un oggetto COM?
- 2. Come convertire un oggetto differito jQuery in una promessa ES6
- 3. Fornire un metodo "fail" predefinito per un oggetto differito jQuery
- 4. Implementare oggetto differito senza usare jquery
- 5. jQuery oggetto differito con chiamate nidificate ajax
- 6. JQuery differito cambia "questo"
- 7. Come posso determinare se un metodo astratto è implementato?
- 8. Come posso determinare se un file è bloccato usando VBS?
- 9. Come posso determinare se un file è vuoto?
- 10. Come posso determinare se un UILabel è stato toccato?
- 11. È necessario sapere se un oggetto dell'interfaccia utente jQuery è stato applicato a un oggetto DOM
- 12. Crea jQuery differito/Promises e AngularJS $ q Differito/Promette compatibile
- 13. Determinare se un oggetto JavaScript è un oggetto "complesso" o semplicemente una stringa
- 14. Come determinare se un poliedro è convesso?
- 15. Come determinare se il figlio è stato cliccato su Jquery
- 16. jQuery - Come determinare se esiste un elemento genitore?
- 17. JQuery differito. Usando $ .when e .progress()
- 18. Posso determinare se una stringa è un ObjectID MongoDB?
- 19. Come posso determinare se un oggetto o un riferimento ha una coercizione di stringa valida?
- 20. Come posso determinare se MS Office 2007 SP2 è installato?
- 21. Determinare se un tipo è statico
- 22. Come posso determinare se un'immagine è stata caricata, usando Javascript/jQuery?
- 23. Come stabilire se un oggetto è un oggetto RegExp?
- 24. Verificare se è un oggetto
- 25. Utilizzando jQuery, come posso sapere se un modulo è cambiato?
- 26. Qual è la differenza tra un oggetto differito e il suo oggetto promessa?
- 27. come determinare se un oggetto è un certo tipo in F #
- 28. Come determinare se una stringa è un numero in C#
- 29. Qual è il modo corretto per determinare se un oggetto è un oggetto simile a un byte in Python?
- 30. jQuery/AJAX: Come determinare quando un host è offline
"controllo di tipo" implica altri aspetti :) –
Come si fa a rimandare? – alexn
bello, ha avuto lo stesso problema qui –