Комментарии 8
Если говорить к примеру про ангуляр и его связку с rxjs — думаю можно было бы привести к примеру какуе-то задачу по типу таблиц с разнообразным фильтрами для пользователя и реакцией отображения на какие либо действия, асинхронные данные и тд…
По примерам: небольшой пример, в котором заданная строка выводится по букве и может быть остановлено-продолжено по какому-то событию (клику на правую часть). Безусловно, конкретно такой пример на чистом js делается в пару строк через setTimeout, однако с ростом сложности и количества событий, которые могут останавливать-запускать-что-нибудь менять в процессе код поверх setTimeout будет нарастать гораздо быстрее и будет гораздо сложнее.
А вот пример функции, которая действительно делается на rx в одну строчку, но на чистом js это тот еще гемморой — .retry, которая перевызовет цепочку событий в случае появления исключения (в целом, чаще всего используется для того, чтобы сходить на бэкэнд еще раз если с первого раза не получилось).
Однако эти все примерчики так, ни о чем по большому счету. Суть RX в изменении парадигмы мышления. Если раньше вы писали что-то типа:
someHighModelFunction() { // page is loaded for example
doA();
doB();
doC();
}
И получалось, что не только потомок имеет какое-то представление о том, как и кто его будет вызывать, но и родитель каждый раз должен расширять список вызванных зависимостей в случае изменения состояния (это можно сильно уменьшить и улучшить грамотным проектированием, но иногда бизнес-требования меняются крайне неожиданным путем), то теперь код совсем иной:
someHighModelFunction(page) {
this.currentPage$.push(page)
}
/* somewhere in dependencies */
Router.currentPage$.subscribe(doA());
И теперь всегда, когда необходимо расширить количество действий, к которым приведет переключение страницы, нам не нужно будет трогать сам код отображения этой страницы, а только подписаться непосредственно в тех местах, где подписка ему нужна. Эдакие events 2.0.
А поверх уже для удобства использования существует куча крутых методов вроде switchMap и прочего.
Использую rxJS в проектах на Angular.
Как-то раз мне нужно было пересчитать, сложный вложенный объект в пяти разных местах после ввода пользователя, все это решилось довольно просто, и работало быстро rxJS.
Что такое RxJS и почему о нём полезно знать