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 @@ -682,6 +682,23 @@ t('double listen', async() => {
682
682
return [ 2 , count ]
683
683
} )
684
684
685
+ t ( 'multiple listeners work after a reconnect' , async ( ) => {
686
+ const sql = postgres ( options )
687
+ , xs = [ ]
688
+
689
+ const s1 = await sql . listen ( 'test' , x => xs . push ( '1' , x ) )
690
+ await sql . listen ( 'test' , x => xs . push ( '2' , x ) )
691
+ await sql . notify ( 'test' , 'a' )
692
+ await delay ( 50 )
693
+ await sql `select pg_terminate_backend(${ s1 . state . pid } )`
694
+ await delay ( 200 )
695
+ await sql . notify ( 'test' , 'b' )
696
+ await delay ( 50 )
697
+ sql . end ( )
698
+
699
+ return [ '1a2a1b2b' , xs . join ( '' ) ]
700
+ } )
701
+
685
702
t ( 'listen and notify with weird name' , async ( ) => {
686
703
const sql = postgres ( options )
687
704
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 @@ -684,6 +684,23 @@ t('double listen', async() => {
684
684
return [ 2 , count ]
685
685
} )
686
686
687
+ t ( 'multiple listeners work after a reconnect' , async ( ) => {
688
+ const sql = postgres ( options )
689
+ , xs = [ ]
690
+
691
+ const s1 = await sql . listen ( 'test' , x => xs . push ( '1' , x ) )
692
+ await sql . listen ( 'test' , x => xs . push ( '2' , x ) )
693
+ await sql . notify ( 'test' , 'a' )
694
+ await delay ( 50 )
695
+ await sql `select pg_terminate_backend(${ s1 . state . pid } )`
696
+ await delay ( 200 )
697
+ await sql . notify ( 'test' , 'b' )
698
+ await delay ( 50 )
699
+ sql . end ( )
700
+
701
+ return [ '1a2a1b2b' , xs . join ( '' ) ]
702
+ } )
703
+
687
704
t ( 'listen and notify with weird name' , async ( ) => {
688
705
const sql = postgres ( options )
689
706
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 @@ -682,6 +682,23 @@ t('double listen', async() => {
682
682
return [ 2 , count ]
683
683
} )
684
684
685
+ t ( 'multiple listeners work after a reconnect' , async ( ) => {
686
+ const sql = postgres ( options )
687
+ , xs = [ ]
688
+
689
+ const s1 = await sql . listen ( 'test' , x => xs . push ( '1' , x ) )
690
+ await sql . listen ( 'test' , x => xs . push ( '2' , x ) )
691
+ await sql . notify ( 'test' , 'a' )
692
+ await delay ( 50 )
693
+ await sql `select pg_terminate_backend(${ s1 . state . pid } )`
694
+ await delay ( 200 )
695
+ await sql . notify ( 'test' , 'b' )
696
+ await delay ( 50 )
697
+ sql . end ( )
698
+
699
+ return [ '1a2a1b2b' , xs . join ( '' ) ]
700
+ } )
701
+
685
702
t ( 'listen and notify with weird name' , async ( ) => {
686
703
const sql = postgres ( options )
687
704
const channel = 'wat-;ø§'
You can’t perform that action at this time.
0 commit comments