@@ -10,23 +10,29 @@ function isTillKey(key: string) {
1010export function storageAdapter ( log : ILogger , prefix : string , wrapper : SplitIO . StorageWrapper ) : StorageAdapter {
1111 let cache : Record < string , string > = { } ;
1212
13- let connectPromise : Promise < void > | undefined ;
14- let disconnectPromise = Promise . resolve ( ) ;
13+ let loadPromise : Promise < void > | undefined ;
14+ let savePromise = Promise . resolve ( ) ;
15+
16+ function _save ( ) {
17+ return savePromise = savePromise . then ( ( ) => {
18+ return Promise . resolve ( wrapper . setItem ( prefix , JSON . stringify ( cache ) ) ) ;
19+ } ) . catch ( ( e ) => {
20+ log . error ( LOG_PREFIX + 'Rejected promise calling wrapper `setItem` method, with error: ' + e ) ;
21+ } ) ;
22+ }
1523
1624 return {
1725 load ( ) {
18- return connectPromise || ( connectPromise = Promise . resolve ( wrapper . getItem ( prefix ) ) . then ( ( storedCache ) => {
26+ return loadPromise || ( loadPromise = Promise . resolve ( ) . then ( ( ) => {
27+ return wrapper . getItem ( prefix ) ;
28+ } ) . then ( ( storedCache ) => {
1929 cache = JSON . parse ( storedCache || '{}' ) ;
2030 } ) . catch ( ( e ) => {
21- log . error ( LOG_PREFIX + 'Rejected promise calling storage getItem, with error: ' + e ) ;
31+ log . error ( LOG_PREFIX + 'Rejected promise calling wrapper ` getItem` method , with error: ' + e ) ;
2232 } ) ) ;
2333 } ,
2434 save ( ) {
25- return disconnectPromise = disconnectPromise . then ( ( ) => {
26- return Promise . resolve ( wrapper . setItem ( prefix , JSON . stringify ( cache ) ) ) . catch ( ( e ) => {
27- log . error ( LOG_PREFIX + 'Rejected promise calling storage setItem, with error: ' + e ) ;
28- } ) ;
29- } ) ;
35+ return savePromise ;
3036 } ,
3137
3238 get length ( ) {
@@ -40,11 +46,11 @@ export function storageAdapter(log: ILogger, prefix: string, wrapper: SplitIO.St
4046 } ,
4147 removeItem ( key : string ) {
4248 delete cache [ key ] ;
43- if ( isTillKey ( key ) ) this . save ! ( ) ;
49+ if ( isTillKey ( key ) ) _save ( ) ;
4450 } ,
4551 setItem ( key : string , value : string ) {
4652 cache [ key ] = value ;
47- if ( isTillKey ( key ) ) this . save ! ( ) ;
53+ if ( isTillKey ( key ) ) _save ( ) ;
4854 }
4955 } ;
5056}
0 commit comments