๐ง๐ ๐ฐ๐ฟ๐ผ๐ถ๐ ๐ฏ๐ถ๐ฒ๐ป ๐๐๐ถ๐น๐ถ๐๐ฒ๐ฟ switchMap ๐ฒ๐ป ๐๐ป๐ด๐๐น๐ฎ๐ฟ ?
๐๐ฎ๐ป๐ ๐ด๐ฌ % ๐ฑ๐ฒ๐ ๐ฝ๐ฟ๐ผ๐ท๐ฒ๐๐, ๐ถ๐น ๐ฒ๐๐ ๐บ๐ฎ๐น ๐ฝ๐น๐ฎ๐ฐ๐ฒฬโฆ ๐ผ๐ ๐บ๐ฎ๐น ๐ฐ๐ผ๐บ๐ฝ๐ฟ๐ถ๐.
Et pourtant, cโest probablement lโopรฉrateur RxJS le plus puissant pour des interfaces rรฉactives.
Jโai condensรฉ lโessentiel dans un carrousel clair, concret et visuel :
โ Ce que fait vraiment switchMap (et pourquoi il annule)
โ Les cas oรน il ๐ฃ๐ณ๐ช๐ญ๐ญ๐ฆ (et ceux oรน il faut lโรฉviter ร tout prix)
โ Des analogies simples, des snippets concrets, des combinaisons gagnantes
Tu y trouveras aussi :
โ Cas typique : recherches HTTP avec annulation automatique
โ Navigation Angular : comment รฉviter les fuites de donnรฉes entre routes
โ NgRx Effects : transformer des actions sans fuite mรฉmoire
๐ฌ Tu utilises dรฉjร switchMap ?
Dis-moi en commentaire :
โ Dans quel cas il tโa sauvรฉ ?
โ Ou au contraire, si tu tโes dรฉjร fait piรฉger par un switchMap mal placรฉ ?
๐๐ ๐๐ถ ๐๐ ๐๐ฒ๐๐ ๐พ๐๐ฒ ๐ท๐ฒ ๐ฑ๐ฒฬ๐ฐ๐ผ๐ฟ๐๐ถ๐พ๐๐ฒ ๐๐ป ๐ฎ๐๐๐ฟ๐ฒ ๐ฒฬ๐น๐ฒฬ๐บ๐ฒ๐ป๐ ๐ฑ๐ฒ ๐ฅ๐ ๐ท๐ ๐ฒฬ๐ฐ๐ฟ๐ถ๐ ๐๐ผ๐ป ๐ฝ๐ฟ๐ผ๐ฏ๐น๐ฒฬ๐บ๐ฒ ๐ฒ๐ป ๐ฐ๐ผ๐บ๐บ๐ฒ๐ป๐๐ฎ๐ถ๐ฟ๐ฒ, ๐ท๐ฒ ๐๐ฟ๐ฎ๐ถ๐๐ฒ๐ฟ๐ฎ๐ถ ๐ฑ๐ฎ๐ป๐ ๐น๐ฒ๐ ๐ฝ๐ฟ๐ผ๐ฐ๐ต๐ฎ๐ถ๐ป๐ ๐ฒฬ๐ฝ๐ถ๐๐ผ๐ฑ๐ฒ๐.
๐ Et si tu as loupรฉ les รฉpisodes prรฉcรฉdent, pas de soucis, je les remets en commentaire.
Ton explication de switchMap est juste mais un peu imprรฉcise si je me remet dans la peau du moi qui dรฉbutait ๐ฌ
- Le titre : switchMap n'a rien ร voir avec angular donc j'aurais juste enlevรฉ la fin pour "Utilises-tu bien switchMap ?"
- Le fonctionnement : Oui, c'est effectivement un map + switchAll et ton explication est juste MAIS switchMap n'abandonne pas purement et simplement l'observable prรฉcรฉdent, il *switch* sur le nouveau. => En gros, SI la source รฉmet une nouvelle valeur ALORS switchMap unsubscribe l'observable interne (celui retournรฉ par project) (et d'ailleurs c'est pas forcรฉment un obs mais un observableInput, aka un obs, une promesse, un array, une string, etc.) et s'abonne au nouvel observable recrรฉรฉ par la fonction project AVEC la nouvelle valeur รฉmise.
=> Donc si l'obs interne a toujours le temps de complete, on ne verra jamais l'"abandon" du prรฉcรฉdent obs + si l'obs interne renvoie x valeurs dans le temps et non une seule, il pourrait en envoyer une infinitรฉ avant de switcher sur le nouveau. En gros, il unsubscribe que l'obs interne qui n'a pas complete, ร la diffรฉrence d'exhaustMap qui fait l'inverse => il ignore la nouvelle รฉmission TANT QUE l'obs interne n'a pas complete
Attention ร la gestion d'erreurs ! Un simple "catchError" provoque un dรฉsabonnement
Je propose des alternatives dans ma newsletter : https://whileitcompiles.substack.com/i/135461575/retry-versus-pipeception