Jeśli mam funkcję, która czasami zwraca obiekt odroczony, ale czasami obiekt nieodroczony. Jak mogę powiedzieć, który to jest?Jak ustalić, czy obiekt jQuery jest odroczony?
Odpowiedz
W zależności od przypadku zastosowania, można również użyć jQuery.when
[1]:
Jeśli pojedynczy argument przekazany do
jQuery.when
i to nie jest odroczona, to będą traktowane jako rozwiązany odroczony a wszystkie wykonane przydziały odsyłaczy z powrotem będą wykonane natychmiast.
Z jQuery.when
można traktować tajemniczy obiekt zawsze jako odroczony:
// 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);
Bardzo przydatna odpowiedź, dziękuję! – nrodic
Czy Twój program obsługi sukcesu nie ma potencjalnie różnych argumentów przekazanych do niego - w zależności od tego, czy obiekt został odroczony czy nie? W takim przypadku nadal będziesz musiał używać pisania na klawiaturze, jak to sugerujesz poniżej. – backdesk
@Crungmungus: "Jeśli pojedynczy argument zostanie przekazany do jQuery.Gdy i nie jest to Odroczona lub Obietnica, będzie traktowana jako rozstrzygnięta Odroczona, a wszystkie dołączone przydziały odsyłaczy zostaną wykonane natychmiastowo. " –
Ponieważ jQuery Odroczone są tworzone przez kopiowanie metod ukrytych obiektów zamiast wywoływania nowego operatora na funkcji, nie można udowodnić, że obiekt jest rzeczywiście instancją jQuery.Deferred. Myślę, że powinieneś pójść z Duck-Typing:
"Kiedy widzę ptaka, który chodzi jak kaczka i pływa jak kaczka, a szarpie jak kaczka, nazywam tego ptaka kaczką". - James Whitcomb Riley
W zależności od tego, co obiekty mogłyby zostać zwrócone (jakie właściwości należy się spodziewać), sprawdź czy występują szczególne właściwości/metody:
var x = getMysteriousObject();
if (x.promise) {
// Deferred
} else {
// Not a deferred
}
Można szczegółowo tę kontrolę w razie potrzeby :
if ($.isFunction(x.promise)) {
// Deferred
}
lub (odróżnić odroczony cele i inne implementacje interfejsu firmy Promise)
if (x.promise && x.resolve) {
// Deferred
}
OK, to myślę, że pisanie z kaczką to najlepsza droga. Martwiło mnie, że zamiast kaczki dostanie się przepiórka. Teraz myślę, że to nie jest takie ważne. Wielkie dzięki! – WawaBrother
Zainspirowany Niko's answer, stworzyłem kolejną realizację że sprawdzić, czy obiekt jest odroczone na podstawie nazwy jego właściwości: , ale także na temat zawartości tych właściwości. Musiałem to zrobić, ponieważ inny mój obiekt miał właściwość o nazwie obietnica.
if (typeof value.resolve !== "function") {
return false;
}
return String(value.resolve) === String($.Deferred().resolve);
- 1. jQuery odroczony obiekt z zagnieżdżonymi wywołaniami ajax
- 2. Implementacja Odroczony obiekt bez użycia jquery
- 3. Jak przekonwertować obiekt odroczony jQuery na obietnicę ES6
- 4. Jak przekonwertować obietnicę kątową na obiekt odroczony jquery
- 5. .NET: Jak ustalić, czy obiekt jest obiektem COM?
- 6. Jak przekonwertować próbkę oddzwonienia na obiekt odroczony?
- 7. jQuery - Jak ustalić, czy istnieje element rodzica?
- 8. Jak ustalić, czy IType jest klasą abstrakcyjną?
- 9. Jak ustalić, czy jednostka doktrynalna jest trwała?
- 10. Jak ustalić, czy obiekt istnieje w tablicy, czy nie javascript
- 11. Jak ustalić, czy wiersz tabeli jest widoczny czy nie?
- 12. Sprawdź, czy obiekt jest obiektem jQuery.
- 13. jQuery Odroczony: Odrzucenie obietnicy z gotowego filtra
- 14. Jak ustalić, czy używać XMLHttpRequest lub XDomainRequest?
- 15. Jak ustalić, czy obiekt EnvDTE.Project reprezentuje projekt C/C++?
- 16. Jak ustalić, czy drzewo binarne jest kompletne?
- 17. Jak ustalić, czy powiązanie szyn jest przyspieszone?
- 18. Jak ustalić, czy NSString jest pusty?
- 19. Jak ustalić, czy tabela sql jest tymczasowa?
- 20. Jak ustalić, czy ParameterInfo jest typu ogólnego?
- 21. Jak ustalić, czy znak jest chiński znak
- 22. Jak ustalić, czy połączenie internetowe jest dostępne?
- 23. Jak ustalić, czy Kopiowanie lokalne jest konieczne?
- 24. Jak ustalić, czy ścieżka jest podkatalogiem innej?
- 25. Jak ustalić, czy jest oczekiwany semafor wysyłkowy?
- 26. Jak ustalić, czy typ jest typem kolekcji?
- 27. Jak ustalić, czy obiekt implementuje IDictionary lub IList dowolnego typu
- 28. Jak ustalić, czy obiekt istnieje AWS S3 Node.JS sdk
- 29. nie asynchroniczna funkcja realizowana jako jQuery odroczony
- 30. jQuery odroczony .then() nie jest wywoływana po .fail()
"Sprawdzanie typu" oznacza inne aspekty :) –
Jak odkładasz? – alexn
fajny, miał ten sam numer tutaj –