File tree Expand file tree Collapse file tree 6 files changed +66
-18
lines changed Expand file tree Collapse file tree 6 files changed +66
-18
lines changed Original file line number Diff line number Diff line change @@ -171,16 +171,15 @@ function Postgres(a, b) {
171
171
172
172
if ( exists ) {
173
173
channels [ name ] . listeners . push ( listener )
174
+ const result = await channels [ name ] . result
174
175
listener . onlisten && listener . onlisten ( )
175
- return Promise . resolve ( { ... channels [ name ] . result , unlisten } )
176
+ return { state : result . state , unlisten }
176
177
}
177
178
178
- const result = await sql `listen ${ sql ( name ) } `
179
- channels [ name ] = { result, listeners : [ listener ] }
179
+ channels [ name ] = { result : sql `listen ${ sql ( name ) } ` , listeners : [ listener ] }
180
+ const result = await channels [ name ] . result
180
181
listener . onlisten && listener . onlisten ( )
181
- result . unlisten = unlisten
182
-
183
- return result
182
+ return { state : result . state , unlisten }
184
183
185
184
async function unlisten ( ) {
186
185
if ( name in channels === false )
Original file line number Diff line number Diff line change @@ -681,6 +681,23 @@ t('double listen', async() => {
681
681
return [ 2 , count ]
682
682
} )
683
683
684
+ t ( 'multiple listeners work after a reconnect' , async ( ) => {
685
+ const sql = postgres ( options )
686
+ , xs = [ ]
687
+
688
+ const s1 = await sql . listen ( 'test' , x => xs . push ( '1' , x ) )
689
+ await sql . listen ( 'test' , x => xs . push ( '2' , x ) )
690
+ await sql . notify ( 'test' , 'a' )
691
+ await delay ( 50 )
692
+ await sql `select pg_terminate_backend(${ s1 . state . pid } )`
693
+ await delay ( 200 )
694
+ await sql . notify ( 'test' , 'b' )
695
+ await delay ( 50 )
696
+ sql . end ( )
697
+
698
+ return [ '1a2a1b2b' , xs . join ( '' ) ]
699
+ } )
700
+
684
701
t ( 'listen and notify with weird name' , async ( ) => {
685
702
const sql = postgres ( options )
686
703
const channel = 'wat-;ø§'
Original file line number Diff line number Diff line change @@ -172,16 +172,15 @@ function Postgres(a, b) {
172
172
173
173
if ( exists ) {
174
174
channels [ name ] . listeners . push ( listener )
175
+ const result = await channels [ name ] . result
175
176
listener . onlisten && listener . onlisten ( )
176
- return Promise . resolve ( { ... channels [ name ] . result , unlisten } )
177
+ return { state : result . state , unlisten }
177
178
}
178
179
179
- const result = await sql `listen ${ sql ( name ) } `
180
- channels [ name ] = { result, listeners : [ listener ] }
180
+ channels [ name ] = { result : sql `listen ${ sql ( name ) } ` , listeners : [ listener ] }
181
+ const result = await channels [ name ] . result
181
182
listener . onlisten && listener . onlisten ( )
182
- result . unlisten = unlisten
183
-
184
- return result
183
+ return { state : result . state , unlisten }
185
184
186
185
async function unlisten ( ) {
187
186
if ( name in channels === false )
Original file line number Diff line number Diff line change @@ -683,6 +683,23 @@ t('double listen', async() => {
683
683
return [ 2 , count ]
684
684
} )
685
685
686
+ t ( 'multiple listeners work after a reconnect' , async ( ) => {
687
+ const sql = postgres ( options )
688
+ , xs = [ ]
689
+
690
+ const s1 = await sql . listen ( 'test' , x => xs . push ( '1' , x ) )
691
+ await sql . listen ( 'test' , x => xs . push ( '2' , x ) )
692
+ await sql . notify ( 'test' , 'a' )
693
+ await delay ( 50 )
694
+ await sql `select pg_terminate_backend(${ s1 . state . pid } )`
695
+ await delay ( 200 )
696
+ await sql . notify ( 'test' , 'b' )
697
+ await delay ( 50 )
698
+ sql . end ( )
699
+
700
+ return [ '1a2a1b2b' , xs . join ( '' ) ]
701
+ } )
702
+
686
703
t ( 'listen and notify with weird name' , async ( ) => {
687
704
const sql = postgres ( options )
688
705
const channel = 'wat-;ø§'
Original file line number Diff line number Diff line change @@ -171,16 +171,15 @@ function Postgres(a, b) {
171
171
172
172
if ( exists ) {
173
173
channels [ name ] . listeners . push ( listener )
174
+ const result = await channels [ name ] . result
174
175
listener . onlisten && listener . onlisten ( )
175
- return Promise . resolve ( { ... channels [ name ] . result , unlisten } )
176
+ return { state : result . state , unlisten }
176
177
}
177
178
178
- const result = await sql `listen ${ sql ( name ) } `
179
- channels [ name ] = { result, listeners : [ listener ] }
179
+ channels [ name ] = { result : sql `listen ${ sql ( name ) } ` , listeners : [ listener ] }
180
+ const result = await channels [ name ] . result
180
181
listener . onlisten && listener . onlisten ( )
181
- result . unlisten = unlisten
182
-
183
- return result
182
+ return { state : result . state , unlisten }
184
183
185
184
async function unlisten ( ) {
186
185
if ( name in channels === false )
Original file line number Diff line number Diff line change @@ -681,6 +681,23 @@ t('double listen', async() => {
681
681
return [ 2 , count ]
682
682
} )
683
683
684
+ t ( 'multiple listeners work after a reconnect' , async ( ) => {
685
+ const sql = postgres ( options )
686
+ , xs = [ ]
687
+
688
+ const s1 = await sql . listen ( 'test' , x => xs . push ( '1' , x ) )
689
+ await sql . listen ( 'test' , x => xs . push ( '2' , x ) )
690
+ await sql . notify ( 'test' , 'a' )
691
+ await delay ( 50 )
692
+ await sql `select pg_terminate_backend(${ s1 . state . pid } )`
693
+ await delay ( 200 )
694
+ await sql . notify ( 'test' , 'b' )
695
+ await delay ( 50 )
696
+ sql . end ( )
697
+
698
+ return [ '1a2a1b2b' , xs . join ( '' ) ]
699
+ } )
700
+
684
701
t ( 'listen and notify with weird name' , async ( ) => {
685
702
const sql = postgres ( options )
686
703
const channel = 'wat-;ø§'
You can’t perform that action at this time.
0 commit comments