@@ -6,7 +6,21 @@ import { bufToString, isBuf } from './buffer-deno.ts';
6
6
import { compareVersions , nullIsh } from './utils.ts' ;
7
7
declare var __non_webpack_require__ : any ;
8
8
9
- const delay = ( time : number | undefined ) => new Promise ( done => setTimeout ( done , time ?? 0 ) ) ;
9
+
10
+ // setImmediate does not exist in Deno
11
+ declare var setImmediate : any ;
12
+
13
+ // see https://github.com/oguimbal/pg-mem/issues/170
14
+ function timeoutOrImmediate ( fn : ( ) => void , time : number ) {
15
+ if ( time || typeof setImmediate === 'undefined' ) {
16
+ return setTimeout ( fn , time ) ;
17
+ }
18
+ // nothing to wait for, but still executing "later"
19
+ // in case calling code relies on some actual async behavior
20
+ return setImmediate ( fn ) ;
21
+ }
22
+
23
+ const delay = ( time : number | undefined ) => new Promise < void > ( done => timeoutOrImmediate ( done , time ?? 0 ) ) ;
10
24
11
25
function replaceQueryArgs$ ( this : void , sql : string , values : any [ ] ) {
12
26
return sql . replace ( / \$ ( \d + ) / g, ( str : any , istr : any ) => {
@@ -79,7 +93,7 @@ export class Adapters implements LibAdapters {
79
93
80
94
once ( what : string , handler : ( ) => void ) {
81
95
if ( what === 'connect' ) {
82
- setTimeout ( handler , queryLatency ?? 0 ) ;
96
+ timeoutOrImmediate ( handler , queryLatency ?? 0 ) ;
83
97
}
84
98
}
85
99
@@ -113,17 +127,17 @@ export class Adapters implements LibAdapters {
113
127
try {
114
128
const result = this . adaptResults ( query , that . db . public . query ( pgquery . text ) ) ;
115
129
if ( callback ) {
116
- setTimeout ( ( ) => callback ( null , result ) , queryLatency ?? 0 ) ;
130
+ timeoutOrImmediate ( ( ) => callback ( null , result ) , queryLatency ?? 0 ) ;
117
131
return null ;
118
132
} else {
119
- return new Promise ( res => setTimeout ( ( ) => res ( result ) , queryLatency ?? 0 ) ) ;
133
+ return new Promise ( res => timeoutOrImmediate ( ( ) => res ( result ) , queryLatency ?? 0 ) ) ;
120
134
}
121
135
} catch ( e ) {
122
136
if ( callback ) {
123
- setTimeout ( ( ) => callback ( e ) , queryLatency ?? 0 ) ;
137
+ timeoutOrImmediate ( ( ) => callback ( e ) , queryLatency ?? 0 ) ;
124
138
return null ;
125
139
} else {
126
- return new Promise ( ( _ , rej ) => setTimeout ( ( ) => rej ( e ) , queryLatency ?? 0 ) ) ;
140
+ return new Promise ( ( _ , rej ) => timeoutOrImmediate ( ( ) => rej ( e ) , queryLatency ?? 0 ) ) ;
127
141
}
128
142
}
129
143
}
0 commit comments