google-chrome - Chrome 上的 IndexedDB 刷新到磁盘

标签 google-chrome indexeddb

我在 Chrome 上遇到 IndexedDB 问题,一旦事务返回成功写入,我就会重新加载页面。

问题是有时数据在重新加载后不会反射(reflect)。我可以通过在重新加载之前设置大约 100 毫秒的超时来解决这个问题,这让我相信数据不会每次都刷新到磁盘。

Firexox 有 experimental readwriteflush mode它确保在返回成功调用之前将数据刷新到磁盘,但似乎无法为 Chrome 找到类似的方法。有什么建议吗?

这是我的插入代码:

const data = {type: type, value: value};

const objectStore = StorageService.db.transaction(['localData'], 'readwrite').objectStore('localData');

// readwriteflush doesn't work in chrome
// const objectStore = StorageService.db.transaction(['localData'], 'readwriteflush').objectStore('localData');

const requestSet = objectStore.put(data);

requestSet.onerror = function (event) {
    alert('Error in saving data locally');
};

requestSet.onsuccess = function (event) {
    console.log('Data was successfully saved locally: ' + type);
    if (callback != undefined) {
        callback();
    }
};

回调中执行了 location.reload = '/'; (以及其他一些事情),因此页面会在返回 onsuccess 后重新加载。

页面重新加载后,我无法通过代码和开发人员工具看到 IndexedDB 存储上的任何数据。然而,这种情况并不总是发生,我观察到只有当数据比平常大时才会发生这种情况。

最佳答案

请求触发的“成功”并不表示事务已成功提交。事务稍后可能会由于单独的失败请求(例如冲突的添加调用)、I/O 错误或其他原因而失败。断电。

您需要等待事务中触发“完成”事件。 Chrome 在触发“完成”事件之前会刷新到磁盘。

关于google-chrome - Chrome 上的 IndexedDB 刷新到磁盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49766364/

相关文章:

google-chrome - IndexedDB 和 localStorage 存储限制

html - 可能或误用的功能?溢出 :Hidden Weirdness

javascript - EventSource (SSE) 是否应该无限期地尝试重新连接?

javascript 检查图像是否在浏览器缓存中

html - IE 会,但 Chrome/Firefox 不会在 "img"元素中呈现 SVG 嵌入图像

node.js - 我可以使用 MongoDB 模式模型来定义 IndexedDB 索引吗?

laravel - 如何使用 Dexie 将数据库与远程数据库同步

javascript - IndexedDB 和 JavaScript : JSON and objects misunderstanding

javascript - 不推荐使用 indexedDB 缓存音频文件?

javascript - 如何从 JavaScript 中删除整个 IndexedDB 数据库?