PWA中IndexedDB在Vue里存数据为啥刷新就没了?
我在用Vue开发一个PWA应用,想用IndexedDB本地存点用户配置,但每次刷新页面数据就丢了,不知道是打开方式不对还是事务没提交成功?
试过用idb库和原生写法都一样,控制台也没报错,就是读不到之前存的值。下面是我简化后的代码:
<script setup>
import { openDB } from 'idb';
const saveConfig = async () => {
const db = await openDB('myApp', 1, {
upgrade(db) {
db.createObjectStore('config');
}
});
const tx = db.transaction('config', 'readwrite');
tx.store.put({ key: 'theme', value: 'dark' }, 'theme');
// 没加 await tx.done,是不是这里的问题?
}
</script>
你提到的代码里,确实有个地方需要注意,就是在事务完成后需要等待事务完成。你已经想到了这一点,但没加
await tx.done,这可能是问题所在。事务在后台执行,如果不等待它完成,页面可能会刷新,导致数据还没存进去就被清除了。你可以试试修改一下你的
saveConfig函数,确保事务完成后再继续:加上
await tx.done后,确保数据存完再继续执行其他代码,这样应该能解决刷新后数据丢失的问题。记得在读取数据的时候也检查一下事务是否正确处理了。希望这能帮到你,有时候前端的异步操作真是够呛。