Maison > interface Web > js tutoriel > le corps du texte

Différence entre mergeMap, switchMap, concatMap et exhaustMap

王林
Libérer: 2024-09-03 14:48:48
original
1063 Les gens l'ont consulté

Bonjour, lors de votre entretien en tant que développeur Angular, plusieurs questions pourraient vous être posées sur les opérateurs RxJs et leurs différences.

L'une des questions les plus courantes est "Quelle est la différence entre mergeMap vs switchMap vs concatMap vs exhaustMap ?"

Allons-y et expliquons-les en termes simples.

Je vais expliquer la différence de comportement à l'aide d'un exemple simple :

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();

Copier après la connexion

Dans l'exemple de code, que vous pouvez expérimenter sur Stackblitz, vous pouvez voir l'imitation de 3 clics utilisateur

Maintenant, voyons ce que chacun des opérateurs reviendra

Fusionner la carte

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
Copier après la connexion

L'opérateur mergeMap exécute les émissions en parallèle, c'est pourquoi vous voyez

First Click Value: 0
Second Click Value: 0
Third Click Value: 0
Copier après la connexion

avec la valeur 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

Copier après la connexion

L'opérateur switchMap annulera le précédent après chaque nouveau clic, dans notre cas le Premier clic sera annulé par le Deuxième clic et le Deuxième clic sera annulé par le Troisième clic et comme résultat nous verrons les Valeurs du troisième clic

Third Click Value: 0
Third Click Value: 1
Third Click Value: 2
Copier après la connexion

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
Copier après la connexion

L'opérateur concatMap mémorisera tous les clics et les consolera.les enregistrera dans le même ordre, dans notre cas Premier clic, Deuxième clic, Troisième clic comme tu vois dans la console

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
Copier après la connexion

Carte d'échappement

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
Copier après la connexion

L'opérateur exhaustMap bloquera le flux jusqu'à ce que le Premier clic soit terminé et dans notre cas, le Deuxième clic et le Troisième clic seront ignorés

First Click Value: 0
First Click Value: 1
First Click Value: 2
Copier après la connexion

Maintenant que vous comprenez les différences entre ces opérateurs, vous pouvez imaginer les conséquences d'un mauvais choix

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!