Требования: Проект должен преобразовать наблюдаемые данные в обещания и ждать завершения, а при использовании метода toPromise() в проекте Angular подсказка устарела, после чего рекомендуется использовать статические методы firstValueFrom или lastValueFrom.
Зачем устарять метод toPromise()?
Потому что имя метода toPromise() никогда не указывает, какое излучаемое значение Promise разрешит, поскольку наблюдаемые могут со временем создавать несколько значений. При конвертации в Обещание вы можете выбрать, выбрать ли первое значение или последнее значение. Чтобы решить все эти задачи, мы решили устарить до Promise() и ввести две новые вспомогательные функции для преобразования в обещания.
Просто поймитеНаблюдаемые величины дают несколько значенийИ потомОбещания приводят к только одной ценностиЗатем некоторые пользователи хотят использовать первое значение, а некоторые — последнее значение, поэтому появляются firstValueFrom и lastValueFrom. (Примечание: toPromise() — последнее значение для получения наблюдаемых величин)
firstValueИз примера
Возможно, вам стоит получить первое значение, когда оно придёт, не дожидаясь завершения Observable, чтобы использовать firstValueFrom. firstValueFrom разрешит Promise с первым значением, изданным Observable, и сразу же отписывается для сохранения ресурса. Если наблюдаемое завершается без излучения какого-либо значения, первое значениеОт также будет отклонено с помощью EmptyError.
lastValueИз примера
lastValueFrom почти идентичен toPromise(), то есть он будет парсировать с последним значением, достигнутым при завершении наблюдаемой, но ведёт себя иначе, когда наблюдаемая завершается без излучения ни одного значения. Когда Observable завершается без срабатывания, toPromise() успешно разрешится в неопределенное значение (то есть тип возврата меняется), а lastValueFrom будет отклонён как EmptyError. Таким образом, тип возврата lastValueFrom — это Promise<T>, как и toPromise() в RxJS 6.
Пример парсинга
В RxJS интервал(1000) генерирует наблюдаемое число, которое излучает инкрементальную последовательность чисел каждые 1000 миллисекунд (то есть 1 секунду), начиная с 0.
Далее, .pipe(take(10)) — это операторная цепочка, ограничивающая количество элементов, излучаемых наблюдаемой величиной. Здесь take(10) означает, что берутся только значения первых 10 излучённых значений.
Давайте подробно объясним это выражение:
interval(1000): Создайте наблюдаемое число, которое излучает число каждые 1 секунду. Последовательность чисел начинается с 0 и увеличивается на 1 каждый раз.
.pipe(take(10)): Используйте метод .pipe() для соединения нескольких операторов. Здесь используем оператор take(10), который ограничивает наблюдаемую способность излучать только первые 10 значений.
Проверка на ошибки EmptyError
Код таков:
или
Ссылка:Вход по гиперссылке виден. |