@@ -13,6 +13,12 @@ export class RedisIOStorage
13
13
} = { maxAge : 86400 }
14
14
) { }
15
15
16
+ private errorHandler : ( ( error : Error ) => void ) | undefined ;
17
+
18
+ onError ( listener : ( error : Error ) => void ) {
19
+ this . errorHandler = listener ;
20
+ }
21
+
16
22
async getItems < T > ( keys : string [ ] ) : Promise < { [ key : string ] : T | undefined } > {
17
23
const res = Object . fromEntries (
18
24
( await this . redis ( ) . mget ( ...keys ) ) . map ( ( entry , i ) => {
@@ -50,7 +56,14 @@ export class RedisIOStorage
50
56
redisPipeline . set ( val . key , JSON . stringify ( val . content ) ) ;
51
57
}
52
58
} ) ;
53
- await redisPipeline . exec ( ) ;
59
+ const savePromise = redisPipeline . exec ( ) ;
60
+
61
+ if ( this . errorHandler ) {
62
+ // if we have an error handler, we do not need to await the result
63
+ savePromise . catch ( err => this . errorHandler && this . errorHandler ( err ) ) ;
64
+ } else {
65
+ await savePromise
66
+ }
54
67
}
55
68
56
69
public async getItem < T > ( key : string ) : Promise < T | undefined > {
@@ -80,10 +93,17 @@ export class RedisIOStorage
80
93
return ;
81
94
}
82
95
const ttl = options ?. ttl ?? this . options ?. maxAge ;
96
+ let savePromise : Promise < any > ;
83
97
if ( ttl ) {
84
- await this . redis ( ) . setex ( key , ttl , content ) ;
98
+ savePromise = this . redis ( ) . setex ( key , ttl , content ) ;
99
+ } else {
100
+ savePromise = this . redis ( ) . set ( key , content ) ;
101
+ }
102
+ if ( this . errorHandler ) {
103
+ // if we have an error handler, we do not need to await the result
104
+ savePromise . catch ( err => this . errorHandler && this . errorHandler ( err ) ) ;
85
105
} else {
86
- await this . redis ( ) . set ( key , content ) ;
106
+ await savePromise
87
107
}
88
108
}
89
109
0 commit comments