Вимоги: Проєкт має конвертувати Observables у Promises і чекати завершення, а при використанні методу toPromise() у проєкті Angular підказка вже застаріла, після чого рекомендується використовувати статичні методи firstValueFrom або lastValueFrom.
Чому скасувати метод toPromise()?
Оскільки ім'я методу toPromise() ніколи не вказує, яке випромінюване значення розв'язує Обіцянка, оскільки спостережувані можуть генерувати кілька значень з часом. Під час конвертації в Обіцянку ви можете обрати, чи обрати перше значення, що надійде, чи останнє. Щоб вирішити всі ці проблеми, ми вирішили застаріли до Promise() і впровадити дві нові допоміжні функції для конвертації у promises.
Просто зрозумійСпостережувані величини створюють кілька значеньА потімОбіцянки дають лише одну цінністьПотім деякі користувачі хочуть використати перше значення, а деякі — останнє, тому з'являються firstValueFrom і lastValueFrom. (Примітка: toPromise() — це останнє значення для отримання спостережуваних чисел)
firstValueЗ прикладу
Можливо, варто отримати перше значення, коли воно прийде, не чекаючи завершення Observable, щоб використовувати firstValueFrom. firstValueFrom розв'язує обіцянку з першим значенням, випущеним Observable, і одразу відписується для збереження ресурсу. Якщо Спостережувана завершується без випромінювання жодного значення, першеЗначенняЗ також буде відхилено з Порожньою помилкою.
lastValueЗ прикладу
lastValueFrom майже ідентичний toPromise(), тобто він буде аналізувати останнє значення, досягнуте після завершення Спостережувана, але поводиться інакше, коли Спостережувана завершується без жодного значення. Коли Спостережуваний завершується без активації, 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
Код виглядає так:
або
Посилання:Вхід за гіперпосиланням видно. |