diff --git a/src/workers/sqlite.ts b/src/workers/sqlite.ts index aaab650..6e71823 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 ea024dc..b21f467 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