Ваш компонент должен агрегировать сервисы и совершать звонки.
constructor(
public weatherService: WeatherService,
public coordsService: CoordinateService,
) { }
weatherData() {
this.coordsService.getCoordinates('your param').pipe(
switchMap(coords => this.weatherService.getWeatherInfo(coords))
).subscribe(data => console.log(data));
}
Услуги - это провайдеры, которым можно вводить что угодно в Angular. Они должны иметь единственную цель: компоненты должны быть в состоянии использовать их и комбинировать их.
switchMap
является оператором RxJS.
RxJS - это библиотека, широко используемая Angular, которая позволяет реактивное программирование . Когда вы делаете HTTP-вызов, вы создаете наблюдателя, который создается через ключевое слово subscribe
. Это создает поток, в котором данные неизменны.
RxJS позволяет вам использовать операторы для управления потоком. У вас есть множество операторов на выбор.
В случае switchMap
: это оператор, который позволяет переключать поток на другой. Это означает, что сначала вы запрашиваете координаты, а затем используете switchMap
для запроса погоды с результатом первого http-вызова.
Для этого у вас есть несколько операторов, например, mergeMap
, flatMap
... Но switchMap
всегда должен быть первым выбором, потому что он отменяет любой ожидающий запрос, если наблюдаемое снова становится наблюдаемым. Это означает, что пользователь отменяет ожидающий запрос, если он нажимает на кнопку несколько раз подряд, что приводит к уменьшению числа http-вызовов.