Подтвердить что ты не робот

Почему мы должны использовать subscribe() над map() в angular2?

Я пытаюсь использовать наблюдаемые в angular2 и запутался в том, почему я должен использовать map() над subscribe(). Предположим, что я получаю значения из webApi, вроде этого

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

Теперь, используя subscribe(success, error, complete), я могу получить все значения в обратном вызове успеха, и я могу вернуть значения для полного обратного вызова. Если я могу выполнять все эти функции, то в чем необходимость map()? Имеет ли это преимущество?

Короче говоря, почему так нужно писать:

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

, когда они могут просто написать это без функции отображения:

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

Ответ 1

Если вы хотите вернуть Observable, к которому может подписаться другой код, но вы все еще хотите манипулировать событиями данных в текущем методе, используйте map.

Действительный пользователь наблюдаемого должен subscribe(), потому что без subscribe() наблюдаемый не будет выполняться вообще. (forEach() или toArray() и, возможно, другие работают также для выполнения наблюдаемого вместо subscribe())

subscribe() возвращает a Subscription, на который нельзя подписаться, но его можно использовать для отмены подписки.

map() возвращает Observable, на который можно подписаться.

Ответ 2

Подумайте о карте как промежуточном программном обеспечении, которое преобразует ответ.

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 используется для вызова наблюдаемого, пожалуйста, прочитайте хороший документ cold-vs-hot-observables

Ответ 3

Вам нужен subscribe для запуска вашего асинхронного запроса. Если вы просто установите map - запросы не будут вызывать. Вы можете проверить.

Хорошая практика использования map для предварительной обработки данных, потому что многие подписчики могут комментировать ваши результаты. Поэтому вместо добавления предварительной обработки каждому клиенту (подписчику) вы можете подготовить одиночный вывод с единой схемой данных для всех.