web-dev-qa-db-de.com

Warum sollten wir subscribe () über map () in Angular verwenden?

Ich versuche Observables in angle2 auszunutzen und bin verwirrt, warum ich map() anstelle von subscribe() verwenden soll. Angenommen, ich erhalte Werte von einem WebApi wie folgt

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

Jetzt kann ich mit subscribe(success, error, complete) alle Werte beim erfolgreichen Rückruf abrufen und die Werte beim vollständigen Rückruf zurückgeben. Wenn ich all diese Funktionen ausführen kann, was braucht dann map()? Gibt es einen Vorteil?

Kurz gesagt, warum sollte man so schreiben:

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

wenn sie dies einfach ohne die Kartenfunktion schreiben können:

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

Wenn Sie ein Observable zurückgeben möchten, das von einem anderen Code abonniert werden kann, Sie jedoch die Datenereignisse in der aktuellen Methode bearbeiten möchten, verwenden Sie map.

Der tatsächliche Benutzer der Observable muss subscribe(), da die Observable ohne subscribe() überhaupt nicht ausgeführt wird. (forEach() oder toArray() und wahrscheinlich auch andere arbeiten daran, das Observable anstelle von subscribe() auszuführen.)

subscribe() gibt ein Subscription zurück, das nicht abonniert werden kann, aber zum Kündigen des Abonnements verwendet werden kann.

map() gibt ein Observable zurück, das abonniert werden kann.

76

Stellen Sie sich map als Middleware vor, die die Antwort transformiert.

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 wird verwendet, um das Observable aufzurufen. Bitte lesen Sie ein gutes Dokument über cold-vs-hot-observables

30
A.T.

Sie benötigen subscribe, um Ihre asynchrone Anfrage auszuführen. Wenn Sie nur map einstellen, werden keine Anforderungen ausgelöst. Du kannst nachschauen.

Es hat sich bewährt, map zu verwenden, um Ihre Daten vorab zu verarbeiten, da viele Abonnenten Ihre Ergebnisse verarbeiten können. Anstatt also jedem Client (Abonnenten) eine Vorverarbeitung hinzuzufügen, können Sie eine einzelne Ausgabe mit einem einzigen Datenschema für alle vorbereiten.

12
VadimB

.map() ist ein rxjs-Operator, der das Ergebnis in der Form eines Arrays [] entweder .json() anzeigt

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

2
N4R35H