Изисквания: Проектът трябва да преобразува наблюдаемите в обещания и да изчака завършване, а при използване на метода 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
Кодът е следният:
или
Препратка:Входът към хиперлинк е видим. |