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) {
171171
172172 if ( exists ) {
173173 channels [ name ] . listeners . push ( listener )
174+ const result = await channels [ name ] . result
174175 listener . onlisten && listener . onlisten ( )
175- return Promise . resolve ( { ... channels [ name ] . result , unlisten } )
176+ return { state : result . state , unlisten }
176177 }
177178
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
180181 listener . onlisten && listener . onlisten ( )
181- result . unlisten = unlisten
182-
183- return result
182+ return { state : result . state , unlisten }
184183
185184 async function unlisten ( ) {
186185 if ( name in channels === false )
Original file line number Diff line number Diff line change @@ -681,6 +681,23 @@ t('double listen', async() => {
681681 return [ 2 , count ]
682682} )
683683
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+
684701t ( 'listen and notify with weird name' , async ( ) => {
685702 const sql = postgres ( options )
686703 const channel = 'wat-;ø§'
Original file line number Diff line number Diff line change @@ -172,16 +172,15 @@ function Postgres(a, b) {
172172
173173 if ( exists ) {
174174 channels [ name ] . listeners . push ( listener )
175+ const result = await channels [ name ] . result
175176 listener . onlisten && listener . onlisten ( )
176- return Promise . resolve ( { ... channels [ name ] . result , unlisten } )
177+ return { state : result . state , unlisten }
177178 }
178179
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
181182 listener . onlisten && listener . onlisten ( )
182- result . unlisten = unlisten
183-
184- return result
183+ return { state : result . state , unlisten }
185184
186185 async function unlisten ( ) {
187186 if ( name in channels === false )
Original file line number Diff line number Diff line change @@ -683,6 +683,23 @@ t('double listen', async() => {
683683 return [ 2 , count ]
684684} )
685685
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+
686703t ( 'listen and notify with weird name' , async ( ) => {
687704 const sql = postgres ( options )
688705 const channel = 'wat-;ø§'
Original file line number Diff line number Diff line change @@ -171,16 +171,15 @@ function Postgres(a, b) {
171171
172172 if ( exists ) {
173173 channels [ name ] . listeners . push ( listener )
174+ const result = await channels [ name ] . result
174175 listener . onlisten && listener . onlisten ( )
175- return Promise . resolve ( { ... channels [ name ] . result , unlisten } )
176+ return { state : result . state , unlisten }
176177 }
177178
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
180181 listener . onlisten && listener . onlisten ( )
181- result . unlisten = unlisten
182-
183- return result
182+ return { state : result . state , unlisten }
184183
185184 async function unlisten ( ) {
186185 if ( name in channels === false )
Original file line number Diff line number Diff line change @@ -681,6 +681,23 @@ t('double listen', async() => {
681681 return [ 2 , count ]
682682} )
683683
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+
684701t ( 'listen and notify with weird name' , async ( ) => {
685702 const sql = postgres ( options )
686703 const channel = 'wat-;ø§'
You can’t perform that action at this time.
0 commit comments