Skip to content

Was ist ein Stream?

Definition von Stream

Ein "Stream" bezieht sich auf einen Datenfluss, der im Laufe der Zeit sequenziell auftritt. Er kann als Sammlung von Daten betrachtet werden, die nacheinander in einer bestimmten Reihenfolge erscheinen.

Typische Stream-Beispiele in der traditionellen Programmierung

  • Daten beim Lesen von Dateien (z.B. ReadableStream in Node.js)
  • Netzwerkkommunikation (HTTP-Antworten etc.)
  • Benutzereingaben und Ereignisse (Mausbewegung, Klick, Tastatureingabe)

Streams in RxJS

In RxJS werden solche zeitlich auftretenden Daten mit Observable als Streams behandelt. Observable ist ein Mechanismus zur Abstraktion von asynchronen Daten, synchronen Daten, Ereignissen, zeitbasierten Verarbeitungen usw. als "Streams".

Vorteile von Observable

  • Typsicher beschreibbar (Affinität zu TypeScript)
  • Deklarative Darstellung des Datenflusses
  • Operationsketten durch pipe() möglich
  • Explizites Abonnieren durch subscribe()
  • Abbrechbar durch unsubscribe()

Vergleich mit traditionellen Streams

EigenschaftTraditionelle StreamsRxJS Observable
ZielOft auf Dateien/Netzwerk beschränktBeliebige asynchrone/Ereignisse/Zustandsänderungen
EreignisbehandlungVerarbeitung mit Event-Listenern bei jedem AufrufStream-Umwandlung mit fromEvent
AbbruchMethoden variierenEinheitliche Verwaltung mit unsubscribe()
Komposition/TransformationIndividuelle Implementierung mit prozeduralem CodePrägnante Beschreibung mit Operatoren (map, filter etc.)

Beziehung zu Observer und Subscription

  • Observable: Datenquelle (Quelle des Streams)
  • Observer: Datenempfänger (hat next, error, complete)
  • Subscription: Steuerungshandle für Abonnement (Abonnieren, Abmelden, Ressourcenverwaltung)

Observable und Observer sind über Callbacks verbunden und werden durch Subscription gesteuert.

Grundlegendes Beziehungsdiagramm

Zusammenfassung

Das Konzept des "Streams", das den Kern von RxJS bildet, ist eine mächtige Waffe beim Umgang mit asynchronen Verarbeitungen. Mit Observable können verschiedene Datenquellen einheitlich behandelt und der Datenfluss deklarativ und flexibel beschrieben werden.

Beziehung zur Ereignisverarbeitung

In RxJS können auch DOM-Ereignisse mit fromEvent als Streams behandelt werden. Durch den Vergleich mit traditionellen Event-Listenern wird das Konzept des Streams klarer.

TIP

Für einen Vergleich zwischen traditioneller Ereignisverarbeitung und RxJS mit echtem Code siehe Stream-Umwandlung von Ereignissen.

Veröffentlicht unter CC-BY-4.0-Lizenz.