Угловой наблюдаемый HttpClient.put возвращает ноль - PullRequest
0 голосов
/ 04 октября 2019

Я подписываюсь на Observable, возвращенный моим HttpClient.put(...), ответ возвращается null. Вот мой код:

constructor(private http: HttpClient) { }

httpOptions = {
    headers: new HttpHeaders({ 'Content-Type': 'application/json' })
};

updateIsEnabled(type: string, isChecked: boolean) {
    const url = `${this.isEnabledUrl}?type=${type}&isEnabled=${isChecked}`;

    this.http.put(url, this.httpOptions)
        .pipe(
          catchError(this.handleError('updateIsEnabled'))
    ).subscribe(response => {
        if (response.getStatusCode() == 200) {
            //do something
        }
    });
}

Но я получаю: ERROR TypeError: Cannot read property 'getStatusCode' of null

Я уверен, что я отвечаю с 200 OK (Spring бэкэнд), но с пустым телом. Я подумал, может быть, это ожидание JSON. Поэтому я изменил параметры на:

httpTextOptions = {
    headers: new HttpHeaders({ 'Content-Type': 'text/plain', 
                           'Content-Length': '0'})
}

Но все же с теми же результатами.

Есть идеи?

Спасибо

1 Ответ

0 голосов
/ 04 октября 2019

Я не вижу смысла в catchError, поскольку он уничтожает наблюдаемое, не уверен, что это ошибка или я ее неправильно понимаю, но я научился не использовать ее, так как она бесполезна для отлова ошибок.

const { throwError } = rxjs;
const { catchError } = rxjs.operators;

throwError('error').pipe(
  catchError(e => { console.log(e); })
).subscribe(val => { console.log(val); }, e => { console.log(e); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.3/rxjs.umd.min.js"></script>

Вы можете получить ошибку, нажав и обработчик ошибок, который не уничтожает наблюдаемое

const { throwError } = rxjs;
const { tap } = rxjs.operators;

throwError('error').pipe(
  tap(undefined, e => { console.log(e); })
).subscribe(val => { console.log(val); }, e => { console.log(e); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.3/rxjs.umd.min.js"></script>
...