Как стать автором
Обновить

Комментарии 8

НЛО прилетело и опубликовало эту надпись здесь
НЛО прилетело и опубликовало эту надпись здесь
Если есть интерес — могу предложить для примера заглянуть в статью, которую я переводил пару месяцев назад — habrahabr.ru/company/infopulse/blog/338910… Этот пример конечно больше является руководством, которое старается объяснить принцип работы, но оно может также показать, как реактивное программирование может работать при связанных задачах…
Если говорить к примеру про ангуляр и его связку с 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 и прочего.

Само возникновение этой библиотеки в c# и постоянные упоминания самих создателей, свидетельствуют что это не событийная библиотека и использовать её как событийную библиотеку является просто неправильно. Она только для асинхронности. Вот например Вы получили событие от домэлемента но изменение стилей не сработают в этом же обновлении, поэтому делаем задержку и проблема решена. А создана она была вообще для работы с потоками, которых в js вообще нет. Использовать её для получить событие и сделать что-то, просто глупо.
НЛО прилетело и опубликовало эту надпись здесь

Использую rxJS в проектах на Angular.
Как-то раз мне нужно было пересчитать, сложный вложенный объект в пяти разных местах после ввода пользователя, все это решилось довольно просто, и работало быстро rxJS.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий