observables firebaseapp example dev javascript ecmascript-6 generator reactive-programming rxjs5

javascript - firebaseapp - ¿Cómo se compara Observables(Rx.js) con los generadores ES2015?



rxjs firebaseapp (2)

Por lo que yo entiendo, las siguientes son las técnicas para resolver flujos de trabajo de programación asíncrona:

  1. Devolución de llamada (CSP)
  2. Promesas

Nuevos enfoques:

  1. Rx.js Observables (o mostjs, bacon.js, xstream, etc.)
  2. Generadores ES6
  3. Async / Await

Ahora nos estamos alejando de devoluciones de llamadas y promesas a estos enfoques más nuevos. Lo que entiendo actualmente es - Async / Await es más como una abstracción más limpia sobre los generadores ES2015.

Lo que no puedo entender es la diferencia conceptual entre Observables y Generadores. Los he usado tanto y no tengo problemas para usarlos.

Lo que me confunde es el caso de uso de Observables y Generadores. He llegado a la conclusión de que, al final, están abordando el mismo problema: la asincronía. La única diferencia potencial que veo es que los generadores proporcionan intrínsecamente semántica imperativa al código, mientras que los Observables que usan Rxj parecen proporcionar un paradigma reactivo. ¿Pero es eso?

¿Debería ser ese el criterio para elegir entre Observable y Generator? Cuáles son los pros y los contras.

¿Me estoy perdiendo el panorama?

También con Eventible eventualmente convirtiéndose en el futuro Ecmascript, ¿Promises (con token cancelable) / Observable / Generators van a competir entre sí?


Los cambios observables empujan, y por lo tanto el control, no la función que reacciona a él, está en control. Los generadores, por otro lado, requieren que saque valores de ellos. Entonces la función que reaccionará al nuevo valor determina cuándo está listo para un nuevo valor.

Tuve problemas con la contrapresión usando observables, pero con los generadores, puede dejar los valores tan lentamente como desee.

Editar: la última pregunta. Las promesas son solo observables que solo se emiten una vez, por lo que no creo que compitan entre sí. Creo que la verdadera batalla será async / await vs observables, y async / await tiene una ventaja, y ya está en C #. Pero los observables tienen esa dulce sensación de FRP, y la programación funcional es genial, así que creo que ambos terminarán con un buen pedazo de capacidad mental.


Puede considerar los observables de rxjs como generadores asincrónicos, es decir, generadores que producen promesas. Solo porque el contenido no está garantizado para estar listo en el momento que llamamos .next (en oposición a los generadores regulares)

  • El suscriptor consumirá permanentemente en un bucle infinito el contenido del generador (llamando .next)
  • Espere a que la promesa devuelta se resuelva (o revoque) para hacer lo que quiera
  • El observable (hecho con un generador asíncrono) se completará en el retorno de los generadores.

Más lectura

propuesta de iteradores asincrónicos