SlideShare una empresa de Scribd logo
1 de 26
¿Programación reactiva?
¿Qué es RxJs?
@germankuber
http://germankuber.com.ar
http://net-baires.com.ar
¿Qué es ReactiveX?
• Una API para la programación
asíncrona con flujos observables
• Patrón OBSERVER
• Patrón ITERATOR
• Programación funcional con
Colecciones
¿Por qué Observables?
• Tratar flujo de eventos asincrónicos con las mismas operaciones que
tratamos colecciones
• Código mas legible
• Código menos propenso a errores
• Soportar emisión de valores futuros
Soporte
• Java: RxJava
• JavaScript: RxJS
• C#: Rx.NET
• C#(Unity): UniRx
• Scala: RxScala
• Clojure: RxClojure
• C++: RxCpp
• Lua: RxLua
• Ruby: Rx.rb
• Python: RxPY
• Go: RxGo
• Groovy: RxGroovy
• JRuby: RxJRuby
• Kotlin: RxKotlin
• Swift: RxSwift
• PHP: RxPHP
• Elixir: reaxive
• Dart: RxDart
Registro de eventos tradicional
var button = document.querySelector('button’);
button.addEventListener('click', () =>
console.log('Clicked!'))
var button = document.querySelector('button’);
Rx.Observable.fromEvent(button, 'click’)
.subscribe(() => console.log('Clicked!')
Registro de eventos con RxJs
Funciones impuras
var count = 0;
var button = document.querySelector('button');
button.addEventListener('click', () => console.log(`Clicked
${++count} times`));
var button = document.querySelector('button’);
Rx.Observable.fromEvent(button, 'click’)
.scan(count => count + 1, 0)
.subscribe(count => console.log(`Clicked ${count}`));
Funciones puras
Marble diagrams
1 4a2
10 20
multiplyByTen
Conceptos
• Observable
• Observer
• Subscription
• Operators
• Subject
• Schedulers
Observable
Representa la idea de una colección con valores futuros
var observable = Rx.Observable.create(function (observer) {
observer.next(1);
observer.next(2);
observer.next(3);
setTimeout(() => {
observer.next(4);
observer.complete();
}, 1000);
});
1 432
Pull
• El consumer decide cuando recibe la información del producer
• El producer no sabe cuando entregara los datos al consumer
• Todas las funciones implementan un Pull System
• ES2015 introdujo Generator Function y Iterators
Push
• El producer determina cuando le enviar la información al consumer
• El consumer no sabe cuando va a recibir la información
• Promesas es el sistema Push mas usado hoy en día
Push Vs Pull
Single Multiple
Pull Function Iterator
Push Promise Observable
Producer Consumer
Pull
Pasivo: produce datos cuando
se solicita
Activo: decide cuándo se solicitan
los datos.
Push
Activo: produce datos a su
propio ritmo.
Pasivo: reacciona a los datos
recibidos.
Observer
Sabe como escuchar los valores retornados por el observable
console.log('Antes de suscribirme’);
observable.subscribe({
next: x => console.log('Valor : ' + x),
error: err => console.error('Error: ' + err),
complete: () => console.log('Completo'),
});
console.log('Despues de suscribirme’);
1 432
Observable + Observer
1 432
Antes de suscribirme
Valor : 1
Valor : 2
Valor : 3
Despues de suscribirme
Valor : 4
Completo
var observable = Rx.Observable.from([10, 20, 30]);
var subscription = observable.subscribe(x =>
console.log(x));
// Mas tarde:
subscription.unsubscribe();
Subscription
Representa la ejecución de un Observable, es principalmente útil para
cancelar la ejecución.
Subject
Es el equivalente a un EventEmitter, y la única forma de difundir un
valor o evento entre múltiples observadores.
var subject = new Rx.Subject();
subject.subscribe({
next: (v) => console.log('observerA: ' + v)
});
subject.subscribe({
next: (v) => console.log('observerB: ' + v)
});
subject.next(1);
subject.next(2);
Operators
• Funciones que permiten un estilo de programación funcional
• Podemos manipular colecciones
• No cambian la instancia observable existente. En su lugar, devuelven
un nuevo Observable
• Son métodos del tipo Observable, como .map (...), .filter (...), .merge
(...), etc.
Creation Operators
• ajax
• bindCallback
• bindNodeCallback
• create
• defer
• empty
• from
• fromEvent
• fromEventPattern
• fromPromise
• generate
• interval
• never
• of
• repeat
• repeatWhen
• range
• throw
• timer
Transformation Operators
• buffer
• bufferCount
• bufferTime
• bufferToggle
• bufferWhen
• concatMap
• concatMapTo
• exhaustMap
• expand
• groupBy
• map
• mapTo
• mergeMap
• mergeMapTo
• mergeScan
• pairwise
• partition
• pluck
• scan
• switchMap
• switchMapTo
• window
• windowCount
• windowTime
• windowToggle
• windowWhen
Filtering Operators
• debounce
• debounceTime
• distinct
• distinctKey
• distinctUntilChanged
• distinctUntilKeyChang
ed
• elementAt
• filter
• first
• ignoreElements
• audit
• auditTime
• last
• sample
• sampleTime
• single
• skip
• skipUntil
• skipWhile
• take
• takeLast
• takeUntil
• takeWhile
• throttle
• throttleTime
Operador - Merge
A CB
merge
ED F
A CB ED F
Operador - Filter
0 321
filter(x => x % 2 === 1)
4
1 3
Operador - Skip
0 321
skip(3)
4
43
¿ Y ahora ?
Recursos
30 días con RxJS
https://medium.com/@jorgeucano
Reactivex
http://reactivex.io/rxjs/manual/overview.html
Slack
http://slack.meetupjs.com.ar/
Gracias !!
@germankuber
http://germankuber.com.ar
http://net-baires.com.ar

Más contenido relacionado

Similar a Rx js

Elio Rojano - VoIP2DAY 2016 | Que hace tu Asterisk cuando no miras
Elio Rojano - VoIP2DAY 2016 | Que hace tu Asterisk cuando no mirasElio Rojano - VoIP2DAY 2016 | Que hace tu Asterisk cuando no miras
Elio Rojano - VoIP2DAY 2016 | Que hace tu Asterisk cuando no mirasVOIP2DAY
 
Qué hace tu Asterisk cuando no miras
Qué hace tu Asterisk cuando no mirasQué hace tu Asterisk cuando no miras
Qué hace tu Asterisk cuando no mirasElio Rojano
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalParadigma Digital
 
Programación Reactiva con RxJava
Programación Reactiva con RxJavaProgramación Reactiva con RxJava
Programación Reactiva con RxJavaParadigma Digital
 
Programación Reactiva en Android
Programación Reactiva en AndroidProgramación Reactiva en Android
Programación Reactiva en AndroidDroidcon Spain
 
Programación reactiva con Vert.x
Programación reactiva con Vert.xProgramación reactiva con Vert.x
Programación reactiva con Vert.xFran García
 
SQL11: Replicación
SQL11: ReplicaciónSQL11: Replicación
SQL11: ReplicaciónSolidQ
 
Akkaships: "Primeros pasos con Akka: Olvídate de los threads"
Akkaships: "Primeros pasos con Akka: Olvídate de los threads"Akkaships: "Primeros pasos con Akka: Olvídate de los threads"
Akkaships: "Primeros pasos con Akka: Olvídate de los threads"Miguel Angel Fernandez Diaz
 
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAPARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAVíctor Bolinches
 
Preparando el entorno de Red de Oracle Database 11gZ052 06
Preparando el entorno de Red de Oracle Database 11gZ052 06Preparando el entorno de Red de Oracle Database 11gZ052 06
Preparando el entorno de Red de Oracle Database 11gZ052 06Alexander Calderón
 
Tecnicas avanzadas de monitoreo
Tecnicas avanzadas de monitoreoTecnicas avanzadas de monitoreo
Tecnicas avanzadas de monitoreoSpanishPASSVC
 
Java8 : Más allá de las Expresiones Lambdas
Java8 :  Más allá de las Expresiones LambdasJava8 :  Más allá de las Expresiones Lambdas
Java8 : Más allá de las Expresiones LambdasEudris Cabrera
 
Sistemas operativos unidad 2
Sistemas operativos unidad 2Sistemas operativos unidad 2
Sistemas operativos unidad 2Luis Cigarroa
 
Meetup AWS User Group chile - Diciembre 2018
Meetup AWS User Group chile - Diciembre 2018Meetup AWS User Group chile - Diciembre 2018
Meetup AWS User Group chile - Diciembre 2018Gonzalo Vásquez
 

Similar a Rx js (20)

Elio Rojano - VoIP2DAY 2016 | Que hace tu Asterisk cuando no miras
Elio Rojano - VoIP2DAY 2016 | Que hace tu Asterisk cuando no mirasElio Rojano - VoIP2DAY 2016 | Que hace tu Asterisk cuando no miras
Elio Rojano - VoIP2DAY 2016 | Que hace tu Asterisk cuando no miras
 
Qué hace tu Asterisk cuando no miras
Qué hace tu Asterisk cuando no mirasQué hace tu Asterisk cuando no miras
Qué hace tu Asterisk cuando no miras
 
Equipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma DigitalEquipo de Marketing de Paradigma Digital
Equipo de Marketing de Paradigma Digital
 
Programación Reactiva con RxJava
Programación Reactiva con RxJavaProgramación Reactiva con RxJava
Programación Reactiva con RxJava
 
Programación Reactiva en Android
Programación Reactiva en AndroidProgramación Reactiva en Android
Programación Reactiva en Android
 
Programación reactiva con Vert.x
Programación reactiva con Vert.xProgramación reactiva con Vert.x
Programación reactiva con Vert.x
 
Java
Java Java
Java
 
Java
JavaJava
Java
 
SQL11: Replicación
SQL11: ReplicaciónSQL11: Replicación
SQL11: Replicación
 
Akkaships: "Primeros pasos con Akka: Olvídate de los threads"
Akkaships: "Primeros pasos con Akka: Olvídate de los threads"Akkaships: "Primeros pasos con Akka: Olvídate de los threads"
Akkaships: "Primeros pasos con Akka: Olvídate de los threads"
 
Reacciona!
Reacciona!Reacciona!
Reacciona!
 
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONAPARADIGMAS FP  Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
PARADIGMAS FP Y OOP USANDO TÉCNICAS AVANZADAS DE PROGRAMACIÓN ASÍNCRONA
 
Java 8
Java 8Java 8
Java 8
 
Preparando el entorno de Red de Oracle Database 11gZ052 06
Preparando el entorno de Red de Oracle Database 11gZ052 06Preparando el entorno de Red de Oracle Database 11gZ052 06
Preparando el entorno de Red de Oracle Database 11gZ052 06
 
Tecnicas avanzadas de monitoreo
Tecnicas avanzadas de monitoreoTecnicas avanzadas de monitoreo
Tecnicas avanzadas de monitoreo
 
Java8 : Más allá de las Expresiones Lambdas
Java8 :  Más allá de las Expresiones LambdasJava8 :  Más allá de las Expresiones Lambdas
Java8 : Más allá de las Expresiones Lambdas
 
Sistemas operativos unidad 2
Sistemas operativos unidad 2Sistemas operativos unidad 2
Sistemas operativos unidad 2
 
Gestión Remota de Equipos con Python
Gestión Remota de Equipos con PythonGestión Remota de Equipos con Python
Gestión Remota de Equipos con Python
 
Procesadores superescalares
Procesadores superescalaresProcesadores superescalares
Procesadores superescalares
 
Meetup AWS User Group chile - Diciembre 2018
Meetup AWS User Group chile - Diciembre 2018Meetup AWS User Group chile - Diciembre 2018
Meetup AWS User Group chile - Diciembre 2018
 

Más de Germán Küber

Explorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en RustExplorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en RustGermán Küber
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETGermán Küber
 
Que son los smart contracts.pptx
Que son los smart contracts.pptxQue son los smart contracts.pptx
Que son los smart contracts.pptxGermán Küber
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesGermán Küber
 
Patrones de diseño en solidity
Patrones de diseño en solidityPatrones de diseño en solidity
Patrones de diseño en solidityGermán Küber
 
Vertical slice architecture
Vertical slice architectureVertical slice architecture
Vertical slice architectureGermán Küber
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesGermán Küber
 
Diamon pattern presentation
Diamon pattern presentationDiamon pattern presentation
Diamon pattern presentationGermán Küber
 
Programación Funcional C#
Programación Funcional C#Programación Funcional C#
Programación Funcional C#Germán Küber
 
Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.Germán Küber
 
Un mundo sin if. generics al rescate
Un mundo sin if. generics al rescateUn mundo sin if. generics al rescate
Un mundo sin if. generics al rescateGermán Küber
 
Azure 360º para Desarrolaldores
Azure 360º para DesarrolaldoresAzure 360º para Desarrolaldores
Azure 360º para DesarrolaldoresGermán Küber
 

Más de Germán Küber (20)

Explorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en RustExplorando el Diseño de la Memoria en Rust
Explorando el Diseño de la Memoria en Rust
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
 
Mev Rapido.pptx
Mev Rapido.pptxMev Rapido.pptx
Mev Rapido.pptx
 
Que son los smart contracts.pptx
Que son los smart contracts.pptxQue son los smart contracts.pptx
Que son los smart contracts.pptx
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 meses
 
Patrones funcionales
Patrones funcionalesPatrones funcionales
Patrones funcionales
 
Patrones de diseño en solidity
Patrones de diseño en solidityPatrones de diseño en solidity
Patrones de diseño en solidity
 
Vertical slice architecture
Vertical slice architectureVertical slice architecture
Vertical slice architecture
 
De 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 mesesDe 0 a blockchain developer en 3 meses
De 0 a blockchain developer en 3 meses
 
Diamon pattern presentation
Diamon pattern presentationDiamon pattern presentation
Diamon pattern presentation
 
Patrones funcionales
Patrones funcionalesPatrones funcionales
Patrones funcionales
 
Defensive code
Defensive codeDefensive code
Defensive code
 
Programación Funcional C#
Programación Funcional C#Programación Funcional C#
Programación Funcional C#
 
Unit testing consejos
Unit testing   consejosUnit testing   consejos
Unit testing consejos
 
Defensive code C#
Defensive code C#Defensive code C#
Defensive code C#
 
Event sourcing
Event sourcingEvent sourcing
Event sourcing
 
C sharp 8
C sharp 8C sharp 8
C sharp 8
 
Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.Arquitectura en aplicaciones Angular y buenas practicas.
Arquitectura en aplicaciones Angular y buenas practicas.
 
Un mundo sin if. generics al rescate
Un mundo sin if. generics al rescateUn mundo sin if. generics al rescate
Un mundo sin if. generics al rescate
 
Azure 360º para Desarrolaldores
Azure 360º para DesarrolaldoresAzure 360º para Desarrolaldores
Azure 360º para Desarrolaldores
 

Último

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan JosephBRAYANJOSEPHPEREZGOM
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxLolaBunny11
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricKeyla Dolores Méndez
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfJulian Lamprea
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIAWilbisVega
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveFagnerLisboa3
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...silviayucra2
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx241521559
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudianteAndreaHuertas24
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíassuserf18419
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITMaricarmen Sánchez Ruiz
 

Último (13)

guía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Josephguía de registro de slideshare por Brayan Joseph
guía de registro de slideshare por Brayan Joseph
 
Presentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptxPresentación guía sencilla en Microsoft Excel.pptx
Presentación guía sencilla en Microsoft Excel.pptx
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft FabricGlobal Azure Lima 2024 - Integración de Datos con Microsoft Fabric
Global Azure Lima 2024 - Integración de Datos con Microsoft Fabric
 
Desarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdfDesarrollo Web Moderno con Svelte 2024.pdf
Desarrollo Web Moderno con Svelte 2024.pdf
 
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE  DE TECNOLOGIA E INFORMATICA PRIMARIACLASE  DE TECNOLOGIA E INFORMATICA PRIMARIA
CLASE DE TECNOLOGIA E INFORMATICA PRIMARIA
 
EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
POWER POINT YUCRAElabore una PRESENTACIÓN CORTA sobre el video película: La C...
 
Proyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptxProyecto integrador. Las TIC en la sociedad S4.pptx
Proyecto integrador. Las TIC en la sociedad S4.pptx
 
9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante9egb-lengua y Literatura.pdf_texto del estudiante
9egb-lengua y Literatura.pdf_texto del estudiante
 
Trabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnologíaTrabajo Mas Completo De Excel en clase tecnología
Trabajo Mas Completo De Excel en clase tecnología
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 

Rx js

  • 1. ¿Programación reactiva? ¿Qué es RxJs? @germankuber http://germankuber.com.ar http://net-baires.com.ar
  • 2. ¿Qué es ReactiveX? • Una API para la programación asíncrona con flujos observables • Patrón OBSERVER • Patrón ITERATOR • Programación funcional con Colecciones
  • 3. ¿Por qué Observables? • Tratar flujo de eventos asincrónicos con las mismas operaciones que tratamos colecciones • Código mas legible • Código menos propenso a errores • Soportar emisión de valores futuros
  • 4. Soporte • Java: RxJava • JavaScript: RxJS • C#: Rx.NET • C#(Unity): UniRx • Scala: RxScala • Clojure: RxClojure • C++: RxCpp • Lua: RxLua • Ruby: Rx.rb • Python: RxPY • Go: RxGo • Groovy: RxGroovy • JRuby: RxJRuby • Kotlin: RxKotlin • Swift: RxSwift • PHP: RxPHP • Elixir: reaxive • Dart: RxDart
  • 5. Registro de eventos tradicional var button = document.querySelector('button’); button.addEventListener('click', () => console.log('Clicked!')) var button = document.querySelector('button’); Rx.Observable.fromEvent(button, 'click’) .subscribe(() => console.log('Clicked!') Registro de eventos con RxJs
  • 6. Funciones impuras var count = 0; var button = document.querySelector('button'); button.addEventListener('click', () => console.log(`Clicked ${++count} times`)); var button = document.querySelector('button’); Rx.Observable.fromEvent(button, 'click’) .scan(count => count + 1, 0) .subscribe(count => console.log(`Clicked ${count}`)); Funciones puras
  • 7. Marble diagrams 1 4a2 10 20 multiplyByTen
  • 8. Conceptos • Observable • Observer • Subscription • Operators • Subject • Schedulers
  • 9. Observable Representa la idea de una colección con valores futuros var observable = Rx.Observable.create(function (observer) { observer.next(1); observer.next(2); observer.next(3); setTimeout(() => { observer.next(4); observer.complete(); }, 1000); }); 1 432
  • 10. Pull • El consumer decide cuando recibe la información del producer • El producer no sabe cuando entregara los datos al consumer • Todas las funciones implementan un Pull System • ES2015 introdujo Generator Function y Iterators
  • 11. Push • El producer determina cuando le enviar la información al consumer • El consumer no sabe cuando va a recibir la información • Promesas es el sistema Push mas usado hoy en día
  • 12. Push Vs Pull Single Multiple Pull Function Iterator Push Promise Observable Producer Consumer Pull Pasivo: produce datos cuando se solicita Activo: decide cuándo se solicitan los datos. Push Activo: produce datos a su propio ritmo. Pasivo: reacciona a los datos recibidos.
  • 13. Observer Sabe como escuchar los valores retornados por el observable console.log('Antes de suscribirme’); observable.subscribe({ next: x => console.log('Valor : ' + x), error: err => console.error('Error: ' + err), complete: () => console.log('Completo'), }); console.log('Despues de suscribirme’); 1 432
  • 14. Observable + Observer 1 432 Antes de suscribirme Valor : 1 Valor : 2 Valor : 3 Despues de suscribirme Valor : 4 Completo
  • 15. var observable = Rx.Observable.from([10, 20, 30]); var subscription = observable.subscribe(x => console.log(x)); // Mas tarde: subscription.unsubscribe(); Subscription Representa la ejecución de un Observable, es principalmente útil para cancelar la ejecución.
  • 16. Subject Es el equivalente a un EventEmitter, y la única forma de difundir un valor o evento entre múltiples observadores. var subject = new Rx.Subject(); subject.subscribe({ next: (v) => console.log('observerA: ' + v) }); subject.subscribe({ next: (v) => console.log('observerB: ' + v) }); subject.next(1); subject.next(2);
  • 17. Operators • Funciones que permiten un estilo de programación funcional • Podemos manipular colecciones • No cambian la instancia observable existente. En su lugar, devuelven un nuevo Observable • Son métodos del tipo Observable, como .map (...), .filter (...), .merge (...), etc.
  • 18. Creation Operators • ajax • bindCallback • bindNodeCallback • create • defer • empty • from • fromEvent • fromEventPattern • fromPromise • generate • interval • never • of • repeat • repeatWhen • range • throw • timer
  • 19. Transformation Operators • buffer • bufferCount • bufferTime • bufferToggle • bufferWhen • concatMap • concatMapTo • exhaustMap • expand • groupBy • map • mapTo • mergeMap • mergeMapTo • mergeScan • pairwise • partition • pluck • scan • switchMap • switchMapTo • window • windowCount • windowTime • windowToggle • windowWhen
  • 20. Filtering Operators • debounce • debounceTime • distinct • distinctKey • distinctUntilChanged • distinctUntilKeyChang ed • elementAt • filter • first • ignoreElements • audit • auditTime • last • sample • sampleTime • single • skip • skipUntil • skipWhile • take • takeLast • takeUntil • takeWhile • throttle • throttleTime
  • 21. Operador - Merge A CB merge ED F A CB ED F
  • 22. Operador - Filter 0 321 filter(x => x % 2 === 1) 4 1 3
  • 23. Operador - Skip 0 321 skip(3) 4 43
  • 25. Recursos 30 días con RxJS https://medium.com/@jorgeucano Reactivex http://reactivex.io/rxjs/manual/overview.html Slack http://slack.meetupjs.com.ar/

Notas del editor

  1. What makes RxJS powerful is its ability to produce values using pure functions. That means your code is less prone to errors.
  2. Es una colección de callbacks que “sabe” escuchar los valores entregados por el Observable
  3.  Representa la ejecución de un Observable, es principalmente útil para cancelar la ejecución.
  4.  Es el equivalente a un EventEmitter, y la única forma de multi-difundir un valor o evento a varios observers.