Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 3279|Odpowiedź: 2

[Inne] RxJS dotyczący różnicy między firstValueFrom a lastValueFrom

[Skopiuj link]
Opublikowano 2024-8-6 11:19:02 | | | |
Wymagania: Projekt musi przekonwertować Observables na Promises i poczekać na zakończenie, a przy użyciu metody toPromise() w projekcie Angular wskazówka została wycofana, a następnie zaleca się użycie statycznych metod firstValueFrom lub lastValueFrom.



Dlaczego wykluczyć metodę toPromise()?

Ponieważ nazwa metody toPromise() nigdy nie wskazuje, którą wartość emitowaną Promise zostanie rozwiązana, ponieważ Observables mogą generować wiele wartości w czasie. Podczas konwersji na Obietnicę możesz chcieć wybrać, czy chcesz wybrać pierwszą wartość, która się pojawi, czy ostatnią. Aby rozwiązać wszystkie te problemy, zdecydowaliśmy się wycofać toPromise() i wprowadzić dwie nowe funkcje pomocnicze do konwersji na promise.

Po prostu zrozumObserwable generują wiele wartościA potemObietnice przyniosą tylko jedną wartośćNastępnie niektórzy użytkownicy chcą użyć pierwszej wartości, a inni ostatniej, więc pojawiają się firstValueFrom i lastValueFrom. (Uwaga: toPromise() to ostatnia wartość, która otrzymuje obserwable

firstValueFrom przykład

Możesz chcieć uzyskać pierwszą wartość, gdy dotrze, bez czekania na ukończenie Observable, więc możesz użyć firstValueFrom. firstValueFrom rozwiąże Obietkę z pierwszą wartością emitowaną przez Obserwable i natychmiast się zrezygnuje, aby zachować zasób. Jeśli Observable zakończy się bez wygenerowania żadnej wartości, firstValueFrom również zostanie odrzucony z błędem EmptyError.



lastValueFrom przykład

lastValueFrom jest niemal identyczny z toPromise(), co oznacza, że będzie analizował ostatnią wartość osiągniętą po ukończeniu Observable, ale zachowuje się inaczej, gdy Observable jest kompletny bez wydawania pojedynczej wartości. Gdy Observable zakończy się bez wywołania, toPromise() pomyślnie rozwiąże się jako niezdefiniowany (czyli typ returnu się zmieni), a lastValueFrom zostanie odrzucony jako EmptyError. Dlatego typ return lastValueFrom to Promise<T>, podobnie jak toPromise() w RxJS 6.





Przykładowe parsowanie

W RxJS interval(1000) generuje obserwable, która co 1000 milisekund (czyli 1 sekundę) emituje stopniowy ciąg liczb, zaczynając od 0.

Następnie .pipe(take(10)) to łańcuch operatorów ograniczający liczbę elementów emitowanych przez Observable. Tutaj take(10) oznacza, że przyjmowane są tylko wartości pierwszych 10 wyemitowanych danych.

Wyjaśnijmy to wyrażenie szczegółowo:

interval(1000): Stwórz obserwable, która co sekundę emituje liczbę. Ciąg liczb zaczyna się od 0 i za każdym razem rośnie o 1.

.pipe(take(10)): Użyj metody .pipe() do połączenia wielu operatorów. Tutaj używamy operatora take(10), który ogranicza Obserwable do emisji tylko pierwszych 10 wartości.

Test błędów EmptyError

Kod jest następujący:


lub




Odniesienie:Logowanie do linku jest widoczne.




Poprzedni:Wyniki zapytań wiersza poleceń MySQL return ? znak zapytania
Następny:Seria Angular 18 (dwadzieścia dwa) wprowadza bibliotekę ikon FontAwesome
 Ziemianin| Opublikowano 2024-8-6 11:21:09 |
Jeśli używasz lastValueFrom lub firstValueFrom w Angular HTTP, jest to równoważne, nie ma różnicy, czyli możesz użyć któregokolwiek z nich.
 Ziemianin| Opublikowano 2024-10-16 21:44:52 |
Jeśli zwrócisz of(), możesz otrzymać wyjątek bez elementów w sekwencji, lastValueFrom teraz przyjmuje parametr konfiguracyjny jako drugi parametr i możesz określić domyślną wartość, którą ma się wygenerować, gdy obserwacja jest pusta:

Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com