Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 3279|Отговор: 2

[Друго] RxJS за разликата между firstValueFrom и lastValueFrom

[Копирай линк]
Публикувано на 2024-8-6 11:19:02 | | | |
Изисквания: Проектът трябва да преобразува наблюдаемите в обещания и да изчака завършване, а при използване на метода toPromise() в ъглов проект, подсказката е остаряла и се препоръчва да се използват статичните методи firstValueFrom или lastValueFrom.



Защо да се остарява методът toPromise()?

Защото името на метода toPromise() никога не показва коя излъчена стойност Promise ще разреши, тъй като наблюдаемите могат да произвеждат множество стойности с течение на времето. При конвертиране към Обещание може да искате да изберете дали да изберете първата стойност, която пристига, или последната стойност. За да решим всички тези проблеми, решихме да изоставим до Promise() и да въведем две нови помощни функции за конвертиране в обещания.

Просто разберетеНаблюдаемите произвеждат множество стойностиИ тогаваОбещанията водят само до една стойностСлед това някои потребители искат да използват първата стойност, а други – последната стойност, така че се появяват firstValueFrom и lastValueFrom. (Забележка: toPromise() е последната стойност за получаване на наблюдаемите стойности

първоСтойностОт пример

Може да искате да получите първата стойност, когато пристигне, без да чакате Observable да завърши, за да използвате firstValueFrom. firstValueFrom ще разреши Обещанието с първата стойност, излъчена от Наблюдаемията, и веднага ще се отпише, за да запази ресурса. Ако наблюдаемото се завърши без да излъчва никаква стойност, първото ValueFrom също ще бъде отхвърлено с EmptyError.



lastValueFrom пример

lastValueFrom е почти идентичен с toPromise(), което означава, че ще парсира с последната стойност, достигната при завършване на наблюдаемата, но се държи по различен начин, когато наблюдаемият се завърши без да излъчва нито една стойност. Когато Observable завърши без да бъде активиран, toPromise() успешно ще се разреши в неопределен (така че типът на връщане се променя), а lastValueFrom ще бъде отхвърлен като EmptyError. Следователно, типът return-а на lastValueFrom е Promise<T>, точно както toPromise() в RxJS 6.





Примерен парсинг

В RxJS интервалът(1000) генерира наблюдаем, който излъчва инкрементална последователност от числа на всеки 1000 милисекунди (т.е. 1 секунда), започвайки от 0.

След това, .pipe(take(10)) е операторна верига, която ограничава броя на елементите, които Наблюдаемото излъчва. Тук take(10) означава, че се вземат само стойностите на първите 10 излъчвани.

Нека обясним това изразяване подробно:

интервал(1000): Създайте наблюдаема, която излъчва число на всеки 1 секунда. Числовата последователност започва от 0 и се увеличава с 1 всеки път.

.pipe(take(10)): Използвайте метода .pipe() за свързване на няколко оператора. Тук използваме оператора take(10), който ограничава наблюдаемото да излъчва само първите 10 стойности.

Тест за грешки в EmptyError

Кодът е следният:


или




Препратка:Входът към хиперлинк е видим.




Предишен:Резултатите от заявка в командния ред на MySQL връщат ? Въпросителен знак
Следващ:Серията Angular 18 (двадесет и две) представя библиотеката с икони на FontAwesome
 Хазяин| Публикувано на 2024-8-6 11:21:09 |
Ако използвате lastValueFrom или firstValueFrom в Angular HTTP, това е еквивалентно, няма разлика, тоест можете да използвате и двата варианта.
 Хазяин| Публикувано на 2024-10-16 21:44:52 |
Ако върнете of(), може да получите изключение без елементи в последователност, lastValueFrom сега приема конфигурационния параметър като втори параметър и можете да зададете стойността по подразбиране, която да излъчва, когато наблюдаемият е празен:

Отричане:
Целият софтуер, програмни материали или статии, публикувани от Code Farmer Network, са само за учебни и изследователски цели; Горното съдържание не трябва да се използва за търговски или незаконни цели, в противен случай потребителите ще понесат всички последствия. Информацията на този сайт идва от интернет, а споровете за авторски права нямат нищо общо с този сайт. Трябва напълно да изтриете горното съдържание от компютъра си в рамките на 24 часа след изтеглянето. Ако ви харесва програмата, моля, подкрепете оригинален софтуер, купете регистрация и получете по-добри услуги. Ако има нарушение, моля, свържете се с нас по имейл.

Mail To:help@itsvse.com