Подписка устарела: используйте обозреватель вместо сообщения об ошибке - PullRequest
19 голосов
/ 02 апреля 2019

Когда я запускаю линтер, он говорит:

subscribe is deprecated: Use an observer instead of an error callback

Код (из приложения angular 7 с angular-cli):

this.userService.updateUser(data).pipe(
   tap(() => {bla bla bla})
).subscribe(
   this.handleUpdateResponse.bind(this),
   this.handleError.bind(this)
);

Не знаю точно, что я должениспользовать и как ...

Спасибо!

Ответы [ 3 ]

31 голосов
/ 02 апреля 2019

subscribe не рекомендуется, только устаревший вариант, который вы используете.В будущем subscribe будет принимать только один аргумент: либо обработчик next (функция), либо объект-наблюдатель.

Так что в вашем случае вы должны использовать:

.subscribe({
   next: this.handleUpdateResponse.bind(this),
   error: this.handleError.bind(this)
});

См. Эти выпуски GitHub:

1 голос
/ 11 июля 2019

Может быть интересно отметить, что объект observer также может (все еще) содержать метод complete() и другие дополнительные свойства. Пример:

.subscribe({
    complete: () => { ... }, // completeHandler
    error: () => { ... },    // errorHandler 
    next: () => { ... },     // nextHandler
    someOtherProperty: 42
});

Таким образом, гораздо проще опустить определенные методы. При старой подписи необходимо было указывать undefined и придерживаться порядка методов, теперь это намного понятнее, когда, например, только указывается следующий и полный обработчик.

0 голосов
/ 11 июля 2019

Вы можете получить эту ошибку, если у вас есть объект, который может представлять два разных типа Observable<T> | Observable<T2>.

Например:

    const obs = (new Date().getTime() % 2 == 0) ? of(123) : of('ABC');

Возможно, вас удивит следующееу вас ошибка Use an observer instead of a complete callback и Expected 2-3 arguments, but got 1.

obs.subscribe(value => {

});

Это потому, что это может быть один из двух разных типов, а компилятор недостаточно умен, чтобы их согласовать.

Вам нужноизмените код так, чтобы он возвращал Observable<number | string> вместо Observable<number> | Observable<string>.Тонкости этого будут зависеть от того, что вы делаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...