Dlaczego powinniśmy używać subscribe () over map () w Angular?

Próbuję skorzystać z obserwabli w angular2 i pomyliłem się, dlaczego powinienem używać map () zamiast subscribe (). Załóżmy, że otrzymuję wartości z webApi, takie jak to

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

Teraz za pomocą subscribe(success, error, complete) mogę uzyskać wszystkie wartości na wywołanie zwrotne sukcesu i mogę zwrócić wartości na pełne wywołanie zwrotne. Jeśli Mogę zrobić wszystkie te funkcje, to co jest potrzebne map()? Czy to daje jakąś przewagę?

Krótko mówiąc, Dlaczego warto pisać jak to:

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

Kiedy mogą to po prostu napisać bez funkcji mapy:

this.http.get('http://172.17.40.41:8089/api/Master/GetAllCountry')
    .subscribe(value => {        
    }, error => error, () => {           
});
Author: isherwood, 2017-02-20

4 answers

Jeśli chcesz zwrócić Observable inny kod można zapisać, ale nadal chcesz manipulować zdarzeniami danych w bieżącej metodzie, użyj map.

Rzeczywisty użytkownik obserwowalnego musi subscribe(), ponieważ bez subscribe() obserwowalny w ogóle nie zostanie wykonany. (forEach() lub toArray() i prawdopodobnie inne również działają, aby wykonać obserwowalne zamiast subscribe())

subscribe() zwraca Subscription, którego nie można subskrybować, ale można go użyć do anulowania abonament.

map() zwraca Observable, które można zapisać.

 56
Author: Günter Zöchbauer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-20 11:08:35

Myśl mapę jako oprogramowanie pośredniczące, które przekształca odpowiedź.

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 jest używany do wywoływania obserwowalnych, proszę przeczytać dobry dokument na cold-vs-hot-observables

 24
Author: A.T.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-20 11:10:34

Musisz subscribe uruchomić żądanie asynchroniczne. Jeśli po prostu ustawisz map - żadne żądania nie zostaną uruchomione. Możesz sprawdzić.

Dobra praktyka używania map do wstępnego przetwarzania danych, ponieważ wielu subskrybentów może przesyłać Twoje wyniki. Tak więc zamiast dodawać wstępne przetwarzanie do każdego klienta (abonenta) można przygotować pojedyncze wyjście z pojedynczym schematem danych dla wszystkich.

 10
Author: VadimB,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-20 11:08:59

.map() jest operatorem rxjs, wyświetli wynik w tablicy [] w postaci .json() w postaci

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

 1
Author: N4R35H,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-14 07:08:57