diff --git a/projects/ngx-lss/src/lib/ngx-local-storage.service.spec.ts b/projects/ngx-lss/src/lib/ngx-local-storage.service.spec.ts index abefab6..727bcfc 100644 --- a/projects/ngx-lss/src/lib/ngx-local-storage.service.spec.ts +++ b/projects/ngx-lss/src/lib/ngx-local-storage.service.spec.ts @@ -44,6 +44,21 @@ describe('NgxLocalStorageService', () => { expect(resultValues).toContain(secondData); })); + it('should return latest value at the time of subscription', () => { + const testKey = 'some-key'; + const latestDummyData = { someNewData: 12345 }; + + const resultValues: unknown[] = []; + + spectator.service.save(testKey, { someData: 123 }).subscribe(); + const data$ = spectator.service.get(testKey); + spectator.service.save(testKey, latestDummyData).subscribe(); + data$.subscribe(data => resultValues.push(data)); + + expect(resultValues.length).toBe(1); + expect(resultValues).toContain(latestDummyData); + }); + it('returns initial null in case storage is empty', () => { const key = 'some-non-existent-key'; const observerSpy = createObserverSpy(); diff --git a/projects/ngx-lss/src/lib/ngx-local-storage.service.ts b/projects/ngx-lss/src/lib/ngx-local-storage.service.ts index 586e163..c76916e 100644 --- a/projects/ngx-lss/src/lib/ngx-local-storage.service.ts +++ b/projects/ngx-lss/src/lib/ngx-local-storage.service.ts @@ -38,9 +38,14 @@ export class NgxLocalStorageService { * @param key Unique key. */ public get(key: string): Observable { - return this.watchStorageChangeByKey(key).pipe( + const initialValue$ = defer(() => of(this.obtainFromStorageByKey(key))); + const valueChanges$ = this.watchStorageChangeByKey(key).pipe( map(() => this.obtainFromStorageByKey(key)), - startWith(this.obtainFromStorageByKey(key)), + ); + return merge( + initialValue$, + valueChanges$, + ).pipe( shareReplay({ refCount: true, bufferSize: 1 }), ); }