web-dev-qa-db-fra.com

pourquoi devrions-nous utiliser subscribe () sur map () dans Angular?

J'essaie de tirer parti des observables dans angular2 et je me suis demandé pourquoi je devrais utiliser map() sur subscribe(). Supposons que je reçois des valeurs d'un webApi, comme ceci

  this.http.get('http://172.17.40.41:8089/api/Master/GetAllCountry')

Maintenant, en utilisant subscribe(success, error, complete) je peux obtenir toutes les valeurs du rappel de succès et je peux renvoyer les valeurs du rappel complet. Si je peux faire toutes ces fonctionnalités alors quel est le besoin de map()? Donne-t-il un avantage?

En bref, pourquoi on devrait écrire comme ça:

this.http.get('http://172.17.40.41:8089/api/Master/GetAllCountry')
    .map(r=>{})
    .subscribe(value => {
    }, error => error, () => {
});

quand ils peuvent simplement écrire ceci sans la fonction map:

this.http.get('http://172.17.40.41:8089/api/Master/GetAllCountry')
    .subscribe(value => {        
    }, error => error, () => {           
});
46
Lijin Durairaj

Si vous voulez renvoyer un Observable auquel un autre code peut s'abonner, mais que vous souhaitez tout de même manipuler les événements de données dans la méthode actuelle, utilisez map.

L'utilisateur réel de l'observable doit subscribe(), car sans subscribe() l'observable ne sera pas exécuté du tout. (forEach() ou toArray() et probablement d'autres fonctionnent aussi pour exécuter l'observable à la place de subscribe())

subscribe() renvoie un Subscription auquel il n'est pas possible de s'abonner, mais qui peut être utilisé pour annuler l'abonnement.

map() renvoie un Observable auquel on peut s'abonner.

76
Günter Zöchbauer

Pensez map comme un middleware qui transforme la réponse.

this.http.get('http://172.17.40.41:8089/api/Master/GetAllCountry')
.map(r=>r.json())
 .subscribe(result => {
              // here result would have json object that was parsed by map handler...
            },failurCallback,completeCallback)

subscribe est utilisé pour invoquer l'observable, veuillez lire un bon document sur observable à froid ou à chaud

30
A.T.

Vous avez besoin de subscribe pour exécuter votre demande asynchrone. Si vous ne définissez que map - aucune demande ne sera déclenchée. Tu peux vérifier.

Il est recommandé d’utiliser map pour pré-traiter vos données, car de nombreux abonnés peuvent utiliser vos résultats. Ainsi, au lieu d’ajouter un prétraitement à chaque client (abonné), vous pouvez préparer une sortie unique avec un schéma de données unique pour tous.

12
VadimB

.map() est un opérateur rxjs, il affichera le résultat sous la forme d'un tableau [] form soit .json() form

https://www.learnrxjs.io/operators/transformation/map.html

2
N4R35H