Wenn ich den Linter laufen lasse, heißt es:
subscribe is deprecated: Use an observer instead of an error callback
Code (aus einer Angular 7 App mit Angular-Cli):
this.userService.updateUser(data).pipe(
tap(() => {bla bla bla})
).subscribe(
this.handleUpdateResponse.bind(this),
this.handleError.bind(this)
);
Ich weiß nicht genau, was ich verwenden soll und wie ...
Vielen Dank!
.subscribe({ next: this.handleUpdateResponse.bind(this), error: this.handleError.bind(this) })
Antworten:
subscribe
ist nicht veraltet, nur die von Ihnen verwendete Variante ist veraltet. In Zukunftsubscribe
wird nur ein Argument verwendet: entweder dernext
Handler (eine Funktion) oder ein Beobachterobjekt.In Ihrem Fall sollten Sie also Folgendes verwenden:
Siehe diese GitHub-Probleme:
https://github.com/ReactiveX/rxjs/pull/4202
https://github.com/ReactiveX/rxjs/issues/4159
quelle
Vielleicht interessant zu bemerken, dass das
observer
Objekt auch (noch) diecomplete()
Methode und andere zusätzliche Eigenschaften enthalten kann. Beispiel:Auf diese Weise ist es viel einfacher, bestimmte Methoden wegzulassen. Bei der alten Unterschrift war es notwendig
undefined
, die Reihenfolge der Argumente anzugeben und einzuhalten. Jetzt ist es viel klarer, wenn zum Beispiel nur ein nächster und vollständiger Handler bereitgestellt wird.quelle
Sie können diesen Fehler erhalten, wenn Sie ein Objekt eingegeben haben als
Observable<T> | Observable<T2>
- im Gegensatz zuObservable<T|T2>
.Zum Beispiel:
Der Compiler ist nicht machen
obs
vom TypObservable<number | string>
.Es kann Sie überraschen, dass das Folgende Ihnen den Fehler
Use an observer instead of a complete callback
und gibtExpected 2-3 arguments, but got 1.
Dies liegt daran, dass es sich um einen von zwei verschiedenen Typen handeln kann und der Compiler nicht intelligent genug ist, um sie miteinander in Einklang zu bringen.
Sie müssen Ihren Code ändern, um
Observable<number | string>
statt zurückzukehrenObservable<number> | Observable<string>
. Die Feinheiten davon hängen davon ab, was Sie tun.quelle
Ich erhielt die Warnung, weil ich diese zum Abonnieren weitergab:
Da es einen einzelnen Wert zurückgibt, war es nicht mit
subscribe
der Funktionssignatur kompatibel .Wenn Sie darauf umschalten, wird die Warnung ausgeblendet (gibt null / void zurück).
quelle