Docs
  • RxFx
  • What Problems Does It Solve?
  • How do I get started?
  • Why An Event Bus?
    • Why Not Native DOM Events?
  • Why Observables, not just Promises?
    • Why not raw RxJS?
    • How does RxFx simplify working with Observables?
  • Example Apps
  • Fundamentals
    • Concurrency Modes
    • API Docs
  • Examples
    • Ping Pong (bus.listen)
      • Pure JS
      • Testing Ping Pong
    • Alarm Clock
    • Animation 60FPS
  • Integrations
    • Overview
Powered by GitBook
On this page
  1. Why Observables, not just Promises?

Why not raw RxJS?

RxJS can power any sync or async experience, and has a tremendous installation base, with more monthly installs than React and Angular combined. It is a great tool for building things - such as powering the Angular templating system. But, without a great interface to it—like Angular templates—its API and 'everything is a stream' philosophy is just not easy to learn or remember.

People who work with RxJS routinely surface the same kinds of questions:

  • What operator do I use to do X?

  • When do I subscribe?

  • What do I do with my subscription objects?

  • What is the different between mergeMap and exhaustMap? Is flatMap still a thing?

  • How do i decompose an app into units that RxJS can work with

RxFx: RxJS The Good Parts™️

Sure you could do the RxJS thing of modeling the entire app as one stream with many operators in its pipe, and call subscribe() on a single object... But I think it's cleaner, more decoupled, and more like the Actor model, if listeners can be in separate files, and only indirectly connected via pub-sub messages. Imagine growing an application strictly by adding new files, hardly ever re-opening files, since each new piece of logic can be a new agent processing the event stream. It's really quite an elegant architecture! In RxFx, the most commonly used RxJS concepts are available in a simpler API that looks like returning Promises or Observables from Event Listeners. Each listener can be put into a different concurrency mode — via .listenBlocking for example. This all allows you to bring the power of RxJS into a particular corner of your application, or structure your whole application as services/listeners. Either way, you don't need to model any part of your application as a single stream, saving the refactoring time.

Now, let's see how building apps with RxFx compares to raw RxJS with a few examples:

PreviousWhy Observables, not just Promises?NextHow does RxFx simplify working with Observables?

Last updated 3 months ago