From 71e8d26195054c383c5848490c1d2bce31929cab Mon Sep 17 00:00:00 2001 From: Alex Gleason Date: Wed, 15 Nov 2023 17:09:30 -0600 Subject: [PATCH] SqliteWorker: wait until worker is ready --- src/workers/sqlite.ts | 17 +++++++++++++++-- src/workers/sqlite.worker.ts | 4 +++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/workers/sqlite.ts b/src/workers/sqlite.ts index aaab6507..6e718231 100644 --- a/src/workers/sqlite.ts +++ b/src/workers/sqlite.ts @@ -1,17 +1,30 @@ class SqliteWorker { #path: string; #worker: Worker; + ready: Promise; constructor(path: string) { this.#path = path; this.#worker = new Worker(new URL('./sqlite.worker.ts', import.meta.url).href, { type: 'module' }); + + this.ready = new Promise((resolve) => { + const handleEvent = (event: MessageEvent) => { + if (event.data[0] === 'ready') { + this.#worker.removeEventListener('message', handleEvent); + resolve(); + } + }; + this.#worker.addEventListener('message', handleEvent); + }); } - open(): Promise { + async open(): Promise { + await this.ready; return this.#call(['open', [this.#path]]); } - query(sql: string, params?: any): Promise { + async query(sql: string, params?: any): Promise { + await this.ready; return this.#call(['query', [sql, params]]); } diff --git a/src/workers/sqlite.worker.ts b/src/workers/sqlite.worker.ts index ea024dce..b21f4679 100644 --- a/src/workers/sqlite.worker.ts +++ b/src/workers/sqlite.worker.ts @@ -29,4 +29,6 @@ self.addEventListener('message', (event: MessageEvent<[string, Msg]>) => { const [id, msg] = event.data; const result = call(msg); self.postMessage([id, result]); -}); \ No newline at end of file +}); + +self.postMessage(['ready']); \ No newline at end of file