angular - shareReplay: pot reseta sau seta dimensiunea bufferului la 0 astfel încât noile abonamente să trebuiască să aștepte un nou emit
Am următorul observabil:
this.roles$ = auth.User$
.pipe(tap((val: JwtUser|null) => this.logger.debug('Session updated, updating permissions %o', val)))
.pipe(switchMap(this.getRoles.bind(this)))
.pipe(shareReplay({refCount: true, bufferSize: 1}));
Metoda getRoles() efectuează o cerere HTTP de fiecare dată când User$emite. Ultima valoare preluată este redată tuturor noilor abonați. Totuși, când User$emite, nu vreau ca abonații să primească ultima valoare. În schimb, vreau ca ei să aștepte pentru valoarea nou preluată. Am crezut că aș putea realiza acest lucru resetând/golind buffer-ul de fiecare dată când User$emite, dar nu reușesc să găsesc cum să fac asta. Există o altă abordare pe care aș putea încerca-o sau o modalitate de a realiza asta?
Mulțumesc!
Răspuns #1
Dacă am înțeles corect, de fapt îți place o dimensiune a bufferului de 0. Totuși, shareReplay(0) emite ultima valoare a sursei, la fel cum face shareReplay(1) (vezi această explicație despre shareReplay). Poți folosi share și un abonat fictiv în schimb:
this.roles$ = auth.User$
.pipe(tap((val: JwtUser|null) => this.logger.debug('Session updated, updating permissions %o', val)))
.pipe(switchMap(this.getRoles.bind(this)))
.pipe(share());
// keep `refCount` above 0 using a dummy subscription
this.roles$.subscribe(() => {});
Vă rog să mă anunțați printr-un comentariu dacă acesta corespunde cerințelor dumneavoastră.
