如何跟踪indexedDb中的更改?

qzwqbdag  于 2023-08-01  发布在  IndexedDB
关注(0)|答案(1)|浏览(240)

我继续搜索,听说IndexedDb没有观察者。那么,如何跟踪更改值呢?这是不可能的吗?我目前正在使用IndexedDb,使用idb-keyval。你有什么解决的办法吗?或者我应该使用像localfresh这样的库来代替?

mec1mxoz

mec1mxoz1#

唯一的方法是使用中间函数或将代码注入库或修补IndexedDB本身
使用中间代码的版本是最佳的:

import { get, set } from "idb-keyval"

const bus = new EventBus<{
  'change:counter': number
}>()
const cast = new BroadcastChannel('watcher-indexeddb')

function mget(name: string): Promise<any> {
  return get(name)
}
async function mset(name: string, value: any): Promise<void> {
  await set(name, value)
  bus.emit(`change:${name}`, value)
  cast.postMessage({ type: `change:${name}`, value })
}

cast.addEventListener("message", event => {
  if (event.data?.type?.startsWith("change"))
    bus.emit(event.data.type, event.data.value)
})

bus.on("change:counter", value => {
  console.log("Counter changed to %s", value)
})

// Usage: mset('counter', 12)

字符串

相关问题