Cuando ejecuto el linter, dice:
subscribe is deprecated: Use an observer instead of an error callback
Código (de una aplicación angular 7 con angular-cli):
this.userService.updateUser(data).pipe(
tap(() => {bla bla bla})
).subscribe(
this.handleUpdateResponse.bind(this),
this.handleError.bind(this)
);
No sé exactamente qué debo usar y cómo ...
¡Gracias!
.subscribe({ next: this.handleUpdateResponse.bind(this), error: this.handleError.bind(this) })
Respuestas:
subscribe
no está en desuso, solo la variante que estás usando está en desuso. En el futuro,subscribe
solo tomará un argumento: elnext
controlador (una función) o un objeto observador.Entonces, en su caso, debe usar:
Vea estos problemas de GitHub:
https://github.com/ReactiveX/rxjs/pull/4202
https://github.com/ReactiveX/rxjs/issues/4159
fuente
Quizás sea interesante notar que el
observer
Objeto también puede (todavía) contener elcomplete()
método y otras propiedades adicionales. Ejemplo:De esta forma es mucho más fácil omitir ciertos métodos. Con la firma antigua era necesario suplir
undefined
y ceñirse al orden de los argumentos. Ahora es mucho más claro cuando, por ejemplo, solo se proporciona un controlador siguiente y completo.fuente
Puede obtener este error si tiene un objeto escrito como
Observable<T> | Observable<T2>
- en lugar deObservable<T|T2>
.Por ejemplo:
El compilador no hace
obs
de tipoObservable<number | string>
.Puede que le sorprenda que lo siguiente le dé el error
Use an observer instead of a complete callback
yExpected 2-3 arguments, but got 1.
Es porque puede ser de dos tipos diferentes y el compilador no es lo suficientemente inteligente como para reconciliarlos.
Necesita cambiar su código para regresar en
Observable<number | string>
lugar deObservable<number> | Observable<string>
. Las sutilezas de esto variarán según lo que esté haciendo.fuente
Recibí la advertencia porque estaba pasando esto para suscribirme:
Dado que devuelve un solo valor, era incompatible con
subscribe
la firma de la función.Cambiar a esto hizo que la advertencia desapareciera (devuelve nulo / nulo);
fuente