В моем устройстве Angular2 у меня есть компонент, который вызывает метод обслуживания. Метод службы возвращает Observable, и компонент подписывается на него.RxJS Ab (используя) map function Observables
Как я хочу, чтобы служба кэшировала последние вызовы, я бы перехватил данные в Observable с помощью функции map
. Метод образцового обслуживания выглядит следующим образом
provideData():Observable<Data> {
return this.http.get(url).
map(resp => resp.json()).
map(data => {
this.cachedData = _.cloneDeep(data);
return data;
}
}
Этот подход работает для меня, однако, я не уверен, если я не злоупотребляю функцию map
которая ничего не отображает. Это просто перехватчик для хранения данных. Есть ли лучшие или более рекомендуемые способы?
PS: Это не обязательно относится к кешированию, а не к соответствующему использованию функции map
для операций без отображения. In this question Широко одобренный ответ Günter действительно делает то же самое и использует для этого map
. С другой стороны, пользователь olsn заявил в комментариях, что do
будет еще более уместным.
Что о http://stackoverflow.com/questions/36271899/what-is-the-correct-way-to-share -the-result-of-an-angular-2-http-network-call-in/36291681 # 36291681 –
@ GünterZöchbauer Приятно видеть, что вы в основном делали то же самое с точки зрения использования функции карты для выполнения кэширования. Похоже, это и есть путь. – Matt
Вместо использования 'map' используйте' do'-operator, так что вам не нужно добавлять return-statement – olsn