Когда я запускаю линтер, он говорит:
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)
);
Не знаю точно, что использовать и как ...
Благодарность!
.subscribe({ next: this.handleUpdateResponse.bind(this), error: this.handleError.bind(this) })
Ответы:
subscribe
не устарел, устарел только тот вариант, который вы используете. В будущемsubscribe
будет принимать только один аргумент: либоnext
обработчик (функция), либо объект-наблюдатель.Итак, в вашем случае вы должны использовать:
См. Эти проблемы на GitHub:
https://github.com/ReactiveX/rxjs/pull/4202
https://github.com/ReactiveX/rxjs/issues/4159
источник
Может быть интересно отметить, что
observer
объект может также (все еще) содержатьcomplete()
метод и другие, дополнительные свойства. Пример:Таким образом, намного проще пропустить определенные методы. При использовании старой подписи необходимо было указать
undefined
порядок аргументов и придерживаться его. Теперь это намного яснее, когда, например, предоставляется только следующий и полный обработчик.источник
Вы можете получить эту ошибку, если у вас есть объект, набранный как
Observable<T> | Observable<T2>
- вместоObservable<T|T2>
.Например:
Компилятор не делает
obs
из типаObservable<number | string>
.Вас может удивить, что следующее приведет к ошибке
Use an observer instead of a complete callback
иExpected 2-3 arguments, but got 1.
Это потому, что это может быть один из двух разных типов, и компилятор недостаточно умен, чтобы согласовать их.
Вам нужно изменить свой код, чтобы он возвращался
Observable<number | string>
вместоObservable<number> | Observable<string>
. Тонкости этого будут зависеть от того, что вы делаете.источник
Я получал предупреждение, потому что передавал это для подписки:
Поскольку он возвращает единственное значение, он несовместим с
subscribe
сигнатурой функции.При переключении на это предупреждение исчезло (возвращается null / void);
источник