Я не уверен, почему вы подписываетесь на услугу, но это анти-шаблон.
Если переменная APIResponse
используется только в функции getData()
только для создания нового наблюдаемого, тогда вы не нужно.
Чтобы записать ответ или выполнить какие-либо побочные эффекты, используйте оператор tap
.
getData(): Observable<CustomData[] | I2> {
return this.http.get<I1 | I2>('url/to/api').pipe(
map(res => {
if ('responseData' in res) {
return res.responseData;
} else if ('errorCode' in res) {
return res;
}
}),
tap(res => {
// Side effects
if ('errorCode' in res) {
console.log(res.errorCode);
}
}),
);
}
В случае, если вы используете переменную APIResponse
и хотите чтобы назначить ответ на него, вы должны сделать это в операторе tap
, так как это побочный эффект.
tap(res => {
// Assign value to APIResponse;
this.APIResponse = res;
})
Наконец, чтобы получить данные с сервера, подпишитесь на getData()
наблюдаемый поток в вашем компоненте.
this._service.getData().subscribe(data => { // do what you want with data })
Если ваша служба отправляет ответ об ошибке с кодом, отличным от 2xx
, вы можете использовать оператор catchError
или параметры http, чтобы получить полный контроль над запросом.