diff --git a/crates/bindings-typescript/src/sdk/db_connection_impl.ts b/crates/bindings-typescript/src/sdk/db_connection_impl.ts index 1991ce0cbdf..cace1274f4c 100644 --- a/crates/bindings-typescript/src/sdk/db_connection_impl.ts +++ b/crates/bindings-typescript/src/sdk/db_connection_impl.ts @@ -97,6 +97,22 @@ export type DbConnectionConfig = { type ProcedureCallback = (result: ProcedureResultMessage['result']) => void; +type Deferred = { + promise: Promise; + resolve: (value: T | PromiseLike) => void; + reject: (reason?: unknown) => void; +}; + +function createDeferred(): Deferred { + let resolve!: (value: T | PromiseLike) => void; + let reject!: (reason?: unknown) => void; + const promise = new Promise((res, rej) => { + resolve = res; + reject = rej; + }); + return { promise, resolve, reject }; +} + export class DbConnectionImpl implements DbContext { @@ -820,7 +836,7 @@ export class DbConnectionImpl argsBuffer: Uint8Array, reducerArgs?: object ): Promise { - const { promise, resolve, reject } = Promise.withResolvers(); + const { promise, resolve, reject } = createDeferred(); const requestId = this.#getNextRequestId(); const message = ClientMessage.CallReducer({ reducer: reducerName, @@ -884,7 +900,7 @@ export class DbConnectionImpl procedureName: string, argsBuffer: Uint8Array ): Promise { - const { promise, resolve, reject } = Promise.withResolvers(); + const { promise, resolve, reject } = createDeferred(); const requestId = this.#getNextRequestId(); const message = ClientMessage.CallProcedure({ procedure: procedureName,