Heim > Web-Frontend > js-Tutorial > Hauptteil

Unterschied zwischen mergeMap vs. switchMap vs. concatMap vs. ExhaustMap

王林
Freigeben: 2024-09-03 14:48:48
Original
1105 Leute haben es durchsucht

Hallo, in Ihrem Vorstellungsgespräch als Angular-Entwickler werden Ihnen möglicherweise mehrere Fragen zu RxJs-Operatoren und ihren Unterschieden gestellt.

Eine der häufigsten Fragen ist „Was ist der Unterschied zwischen mergeMap vs. switchMap vs. concatMap vs. ExhaustMap?“

Lassen Sie uns darauf eingehen und sie in einfachen Worten erklären.

Den Verhaltensunterschied erkläre ich anhand eines einfachen Beispiels:

import { interval, take, tap, from } from 'rxjs';
import {
  switchMap,
  mergeMap,
  concatMap,
  exhaustMap,
} from 'rxjs/operators';

const mapOperators = [
  mergeMap,
  switchMap,
  concatMap,
  exhaustMap
];

const selectedMap = mapOperators[0]; // <- Change operator index here

const clicks$ = from(['First Click', 'Second Click', 'Third Click']).pipe(
  tap(console.log),
);

clicks$
  .pipe(
    selectedMap((click: number) =>
      interval(500).pipe(
        tap((intervalValue: number) =>
          console.log(
            `${click} Value: ${intervalValue}`
          )
        ),
        take(3)
      )
    )
  )
  .subscribe();

Nach dem Login kopieren

Im Codebeispiel, mit dem Sie auf Stackblitz experimentieren können, können Sie die Nachahmung von 3 Benutzerklicks sehen

Jetzt wollen wir sehen, was jeder der Operatoren zurückgibt

MergeMap

Difference between mergeMap vs switchMap vs concatMap vs exhaustMap

First Click
Second Click
Third Click
First Click Value: 0
Second Click Value: 0
Third Click Value: 0
First Click Value: 1
Second Click Value: 1
Third Click Value: 1
First Click Value: 2
Second Click Value: 2
Third Click Value: 2
Nach dem Login kopieren

Der mergeMap-Operator führt die Emissionen parallel aus, weshalb Sie
sehen

First Click Value: 0
Second Click Value: 0
Third Click Value: 0
Nach dem Login kopieren

mit Wert 0

SwitchMap

Difference between mergeMap vs switchMap vs concatMap vs exhaustMap

First Click
Second Click
Third Click
Third Click Value: 0
Third Click Value: 1
Third Click Value: 2

Nach dem Login kopieren

Der switchMap-Operator bricht den vorherigen nach jedem neuen Klick ab. In unserem Fall wird Erster Klick durch Zweiten Klick und Zweiter Klick abgebrochen durch Third Click abgebrochen und als Ergebnis sehen wir Third Click Values

Third Click Value: 0
Third Click Value: 1
Third Click Value: 2
Nach dem Login kopieren

ConcatMap

Difference between mergeMap vs switchMap vs concatMap vs exhaustMap

First Click
Second Click
Third Click
First Click Value: 0
First Click Value: 1
First Click Value: 2
Second Click Value: 0
Second Click Value: 1
Second Click Value: 2
Third Click Value: 0
Third Click Value: 1
Third Click Value: 2
Nach dem Login kopieren

Der concatMap-Operator speichert alle Klicks und protokolliert sie in der gleichen Reihenfolge, in unserem Fall Erster Klick, Zweiter Klick, Dritter Klick wie Sie sehen in der Konsole

First Click Value: 0
First Click Value: 1
First Click Value: 2
Second Click Value: 0
Second Click Value: 1
Second Click Value: 2
Third Click Value: 0
Third Click Value: 1
Third Click Value: 2
Nach dem Login kopieren

Auspuffkarte

Difference between mergeMap vs switchMap vs concatMap vs exhaustMap

First Click
Second Click
Third Click
First Click Value: 0
First Click Value: 1
First Click Value: 2
Nach dem Login kopieren

Der ExhaustMap-Operator blockiert den Stream, bis Erster Klick abgeschlossen ist. In unserem Fall werden Zweiter Klick und Dritter Klick ignoriert

First Click Value: 0
First Click Value: 1
First Click Value: 2
Nach dem Login kopieren

Da Sie nun die Unterschiede zwischen diesen Operatoren verstehen, können Sie sich vorstellen, welche Folgen die Wahl des falschen Operators hat

Das obige ist der detaillierte Inhalt vonUnterschied zwischen mergeMap vs. switchMap vs. concatMap vs. ExhaustMap. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage