Комментарии 13
Статью можно было бы написать без использования RxJS. Да, мы бы лишились такого мощного заголовка, в котором эта библиотека упоминается, но всё-таки…
После теоретической части можно было бы реализовать свой Observer, да и познакомить с EventEmmiter, который в ноде.
А уж потом кратенько «вот так вот можно без велосипедов это сделать с rxjs».
Но это имхо. Успехов автору!
После теоретической части можно было бы реализовать свой Observer, да и познакомить с EventEmmiter, который в ноде.
А уж потом кратенько «вот так вот можно без велосипедов это сделать с rxjs».
Но это имхо. Успехов автору!
+2
Че-то в первом разделе код примера одинаковый для разных случаев. Так и должно быть?
+1
Да, все верно. Я хотел показать, как код будет вести себя при реактивном подходе(в комментариях в коде показано различие). Сам же пример далек от реальности и был приведен с целью упростить понимание.
-1
Че-то туплю :(
Если код одинаковый, то как он может себя вести по разному на одинаковых данных? Поясните пожалуйста.
Если код одинаковый, то как он может себя вести по разному на одинаковых данных? Поясните пожалуйста.
+1
Да никак) если вы его выполните, то он выдаст одинаковый результат. Я хотел показать, как бы он «мог работать», если бы использовалась push стратегия, а не pull. Если бы я сразу привел код с использованием rxjs, то это усложнило бы его. А так я постарался оъяснить разницу на привычном всем императивном подходе.
0
Че-то я видно совсем тупой :(
Т.е. разница в pull и в push подходах в коментариях? Или надо как-от по разному вызывать код? Если не сильно напряжно, приведите пожалуйста в виде псеводкода разницу в подходах.
Т.е. разница в pull и в push подходах в коментариях? Или надо как-от по разному вызывать код? Если не сильно напряжно, приведите пожалуйста в виде псеводкода разницу в подходах.
+1
Код не надо вызывать по разному, нужно лишь увидеть различия в поведении. Можно сказать, что второй пример это и есть некий «псевдкокод», а не реальный вариант. В pull стретегии, чтобы узнать значение sum, нам нужно будет заново его посчитать: sum = a + b; В push оно посчитается само. Приведу аналогию с excel. У вас есть две ячейки: a(2), b(3). В третьей ячейке вы описываете формулу =A1+B1; Когда вы поменяете a, то значение в 3 ячейке посчитается само. Это и будет push стратегия.
-1
Первый код на JS представляет некоторую практическую задачу (определить три значения, одно из которых равно сумме двух других). Затем автор рассуждает, что JS из-за своей семантики не позволяет прямо класть в код концепт потока и предлагает JS-подобный псевдоязык, какбы изменив семантику JS, который бы обладал нужными автору свойствами, описанными в коментариях. Поскольку конструкции JS не обладают нужной семантикой, приходится представлять концепты реактивного программирования (потоки, подписку, push-стратегию) сторонними средствами (шаблон/класс Observable, колбеки и т.п.). Автор уже это ответил, но я решил подробнее объяснить, как понимаю.
Мне интересно вот что: в ФП с иммутабельными данными любой тип эквивалентен безаргументной функции с точностью до расстановки пустых скобок. Если в примере представить a, b и sum (или хотя бы только sum) в виде безаргументной функции, формально добавив после присваивания
Мне интересно вот что: в ФП с иммутабельными данными любой тип эквивалентен безаргументной функции с точностью до расстановки пустых скобок. Если в примере представить a, b и sum (или хотя бы только sum) в виде безаргументной функции, формально добавив после присваивания
() =>
и добавив () после каждой переменной, будет достигнуто то же поведение. Зачем необходим (т.е. какое место занимает) механизм подписки и линейная упорядоченность значений в реактивном программировании?0
НЛО прилетело и опубликовало эту надпись здесь
Я правильно понял что возможны реактивные зацикливания? Например:
a = b + 3
b = a + 3
a = b + 3
b = a + 3
0
Зацикливания вполне можно создать, но не в вашем примере. Переменная a зависит от некоего источника b, который еще не был создан. Данный пример просто не заработает.
Но зацикливание можно получить, если подписаться на источник, и изменять его значение в ответ на изменение. Например, у вас есть некий буфер сообщений, который представляет собой поток. Вы подписываетесь на него. И в случае, когда вам придет новое сообщение, пытаетесь запушить новое. С обычным Observable это сложно провернуть, но вот используя Subject вполне.
Но зацикливание можно получить, если подписаться на источник, и изменять его значение в ответ на изменение. Например, у вас есть некий буфер сообщений, который представляет собой поток. Вы подписываетесь на него. И в случае, когда вам придет новое сообщение, пытаетесь запушить новое. С обычным Observable это сложно провернуть, но вот используя Subject вполне.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Основы реактивного программирования с использованием RxJS