前提
TypeScript(JavaScript)でindexedDB(Dexieを使って)を取得し、それを利用したプログラムを作っています。
indexedDBは原則非同期でしか取得できないのですが、そのデータを今ある同期処理のメソッド内で利用したいです。
実現したいこと
- indexedDBのデータを同期メソッド内で利用する
該当のソースコード
typescript
1// indexedDBからデータ取得 2 async getData(id: string): { 3 const res = []; 4 try { 5 const db = await new Dexie('db').open(); 6 res = await db.table('db_table').where({ id: id }).toArray(); 7 return res; 8 } catch (e) { 9 console.error('エラー', e); 10 return res; 11 } 12 } 13 14// データの成形 15 async processData(id: string) { 16 const dbData = await this.getData(id); 17 let fixedData = []; 18 fixedData = dbData 19 .filter( ...(省略) ); 20 .sort( ...(省略) ); 21 return fixedData; 22 } 23 24// ここの処理内で processData を呼び出したい 25 createDataTable(tableInfo: Info<any>) { 26 const outputData = processData(tableInfo.id); 27 if (tableInfo.item.length > 0) { 28 console.log(outputData); 29 } 30 }
試したこと
- createDataTable内で当該処理をasyncのアロー関数にしてみました
- createDataTableを全体をasyncにすることは他の処理に影響するため避けたい
回答1件
あなたの回答
tips
プレビュー