Observable<void> bruksmønster i Typescript
Når en asynkron tjeneste ikke har noen returverdi, men jeg ønsker å bruke Observables, er jeg tilbøyelig til å bruke Observable<boolean>. Men jeg har ingen mening for denne boolske verdien fordi tjenesten enten mislykkes eller lykkes, og hvis den mislykkes ønsker jeg at Observable skal være i feilstaten. Dette etterlater kun 'true'-verdier for den observerte booleanen.
Er den følgende bruken av Observable<void> et godt mønster for disse situasjonene? Eller er det forutsigbare problemer med bruken av Observable<void>?
const asyncFuncWithoutResult = (): Observable<void> => {
// fake something async that has no return value
const itWorked = true; // or not
if (itWorked) {
return Observable.of();
} else {
return Observable.throw(Error('It did not work'));
}
}
// call the service
asyncFuncWithoutResult()
.subscribe(
undefined, // nothing will be emitted when using Observable.of()
(err: any) => console.error(err), // handle error state
() => console.log('Success'), // handle success state
);
Svar #1
Bare for å være mer presis, når du definerer et Subject med generisk type void, er det to måter du kan kalle dets next()-metode på, og det er uten noen argumenter:
const subject = new Subject<void>();
subject.next();
...eller med void 0:
subject.next(void 0);
Faktisk er value-argumentet til next valgfritt, så hvis du ikke spesifiserer det, vil det sende undefined, noe som betyr at selv om du har Subject<void> vil du fortsatt motta next-varsler:
asyncFuncWithoutResult().subscribe(alawaysUndefined => {
/* ... */
});
Merk også at du kan gjøre enhver Observable om til <void> (dette er nødvendig når du vil slå sammen flere Observables) ved å bruke map:
source.pipe(map(() => void 0))
...
