Quand je lance le linter, il dit:
subscribe is deprecated: Use an observer instead of an error callback
Code (à partir d'une application angular 7 avec angular-cli):
this.userService.updateUser(data).pipe(
tap(() => {bla bla bla})
).subscribe(
this.handleUpdateResponse.bind(this),
this.handleError.bind(this)
);
Je ne sais pas exactement ce que je dois utiliser et comment ...
Merci!
.subscribe({ next: this.handleUpdateResponse.bind(this), error: this.handleError.bind(this) })
Réponses:
subscribe
n'est pas obsolète, seule la variante que vous utilisez est obsolète. À l'avenir,subscribe
ne prendra qu'un seul argument: soit lenext
gestionnaire (une fonction), soit un objet observateur.Donc, dans votre cas, vous devriez utiliser:
Consultez ces problèmes GitHub:
https://github.com/ReactiveX/rxjs/pull/4202
https://github.com/ReactiveX/rxjs/issues/4159
la source
Peut-être intéressant de noter que l'
observer
objet peut également (encore) contenir lacomplete()
méthode et d'autres propriétés supplémentaires. Exemple:De cette façon, il est beaucoup plus facile d'omettre certaines méthodes. Avec l'ancienne signature, il était nécessaire de fournir
undefined
et de respecter l'ordre des arguments. Maintenant, c'est beaucoup plus clair lorsque, par exemple, ne fournissez qu'un gestionnaire suivant et complet.la source
Vous pouvez obtenir cette erreur si vous avez un objet tapé comme
Observable<T> | Observable<T2>
- par opposition àObservable<T|T2>
.Par exemple:
Le compilateur ne pas faire
obs
de typeObservable<number | string>
.Cela peut vous surprendre que ce qui suit vous donne l'erreur
Use an observer instead of a complete callback
etExpected 2-3 arguments, but got 1.
C'est parce qu'il peut s'agir de l'un des deux types différents et que le compilateur n'est pas assez intelligent pour les réconcilier.
Vous devez changer votre code pour retourner
Observable<number | string>
au lieu deObservable<number> | Observable<string>
. Les subtilités de cela varieront en fonction de ce que vous faites.la source
Je recevais l'avertissement parce que je transmettais ceci pour m'abonner:
Puisqu'il renvoie une seule valeur, il était incompatible avec
subscribe
la signature de fonction de.Le passage à ceci a fait disparaître l'avertissement (retourne nul / non avenu);
la source