typescript - Angular: Observable endrer oppførsel når man bruker en pipe og tab
Jeg jobber med Angular 10 og har fått problemet at fullføringsadferden til mitt observable endrer seg, avhengig av om jeg bruker en pipe eller ikke. Her er de to relevante delene av koden min.
auth.service.ts
...
import { Observable } from 'rxjs';
import { tap } from 'rxjs/operators';
...
register(email: string, password: string): Observable<RegistrationResponse> {
return this.http.post<RegistrationResponse>(
`${environment.API_URL}/users/register`,
{ email, password }).pipe(tap<RegistrationResponse>({
next: (data) => {
console.log('success - tap');
if (data.jwt !== undefined) {
this.setSession(data.jwt);
}
},
error: () => {
console.log('error - tap');
}
})
);
}
...
auth.component.ts
...
this.authService.register(this.email, this.password).subscribe({
next: (_) => {
console.log('success');
this.router.navigate(['/']);
},
error: (error) => {
console.log('error');
this.error = error.error || 'Error';
this.loading = false;
}
});
...
Når forespørselen mislykkes og jeg får et feilsvar, forårsaker det følgende utdata (som forventet):
error - tap
error
Men når forespørselen lykkes, får jeg dette:
success - tap
error <--- unexpected
=> Hvordan gir dette mening, hva går jeg glipp av?
register(email: string, password: string): Observable<RegistrationResponse> {
return this.http.post<RegistrationResponse>(
`${environment.API_URL}/users/register`,
{ email, password })/*.pipe(tap<RegistrationResponse>({
next: (data) => {
console.log('success - tap');
if (data.jwt !== undefined) {
this.setSession(data.jwt);
}
},
error: () => {
console.log('error - tap');
}
})
);*/
}
Utdata :
success
Svar #1
Noe kode i din tap next callback kaster sannsynligvis en feil (sjekk this.setSession(data.jwt)). Feil som kastes i operatorer blir fanget og sendt som feilmeldinger av RxJS. Så error callback i subscribe blir kalt hvis en feil kastes i din pipe upstream.