Add web worker message handler
This commit is contained in:
parent
245341e3f5
commit
54dcd2b29d
@ -56,19 +56,34 @@ export class Database {
|
|||||||
return this.sendMessageToWorker('INIT', {});
|
return this.sendMessageToWorker('INIT', {});
|
||||||
}
|
}
|
||||||
|
|
||||||
public async getDb(): Promise<IDBDatabase> {
|
private sendMessageToWorker<T = any>(type: string, payload: any): Promise<T> {
|
||||||
if (!this.db) {
|
return new Promise((resolve, reject) => {
|
||||||
await this.init();
|
if (!this.indexedDBWorker) {
|
||||||
}
|
reject(new Error('IndexedDB Worker not initialized'));
|
||||||
return this.db!;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
public getStoreList(): { [key: string]: string } {
|
const id = this.messageIdCounter++;
|
||||||
const objectList: { [key: string]: string } = {};
|
this.pendingMessages.set(id, { resolve, reject });
|
||||||
Object.keys(this.storeDefinitions).forEach((key) => {
|
|
||||||
objectList[key] = this.storeDefinitions[key as keyof typeof this.storeDefinitions].name;
|
this.indexedDBWorker.postMessage({ type, payload, id });
|
||||||
|
|
||||||
|
// Timeout de sécurité (30 secondes)
|
||||||
|
setTimeout(() => {
|
||||||
|
if (this.pendingMessages.has(id)) {
|
||||||
|
this.pendingMessages.delete(id);
|
||||||
|
reject(new Error(`Worker message timeout for type: ${type}`));
|
||||||
|
}
|
||||||
|
}, 30000);
|
||||||
});
|
});
|
||||||
return objectList;
|
}
|
||||||
|
|
||||||
|
// ============================================
|
||||||
|
// SERVICE WORKER
|
||||||
|
// ============================================
|
||||||
|
|
||||||
|
private initServiceWorker(): void {
|
||||||
|
this.registerServiceWorker('/database.worker.js');
|
||||||
}
|
}
|
||||||
|
|
||||||
private async registerServiceWorker(path: string): Promise<void> {
|
private async registerServiceWorker(path: string): Promise<void> {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user