Наблюдаемые полезны, когда мы хотим управлять и / или объединять несколько событий с течением времени.
Предположим, у нас есть метод, который вернет обещание для этого JSON:
const dataPromise = fetchData('https://jsonplaceholder.typicode.com/posts');
Кроме того, представьте, что мы отслеживаем присутствие пользователей на текущей странице:
const userLeavePromise = trackUserPresence();
Теперь давайте нарисуем временные шкалы для извлечения данных и событий, связанных с уходом пользователя. Здесь o
обозначает событие, происходящее во времени:
1s 2s 3s 4s 5s
data ------------o
userLeave --------o
Например, ради, данные будут выбираться на 4-й секунде, а наш беспокойный пользователь покинет страницу на 3-й. В этом случае мы хотим отменить операцию выборки и все обратные вызовы пост-обработки (в терминах Promise все .then
-настроенные функции).
Для таких (и многих других) ситуаций RxJS предоставляет множество операторов, которые позволяют нам комбинировать события с течением времени.
В данном конкретном случае мы бы взяли данные, Пока пользователь не покинул страницу:
// Observable for data
const data$ = fetchData('https://jsonplaceholder.typicode.com/posts');
// Observable for user leave
const userLeave$ = trackUserPresence();
data$
.takeUntil(userLeave$)
.subscribe(data => console.log(data))