【问题标题】:IndexedDB flush to disk on Chrome在 Chrome 上将 IndexedDB 刷新到磁盘
【发布时间】:2018-04-11 04:10:19
【问题描述】:

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

问题有时是重新加载后数据不反映。我可以通过在重新加载之前给出大约 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 存储中看到任何数据。然而,这并不总是发生,我观察到只有当数据比平时大时才会发生这种情况。

【问题讨论】:

  • 请贴出存储你期望出现的数据相关的代码,以及读取你期望reload后找到的数据相关的代码
  • @Josh 希望此编辑对您有所帮助,请多多包涵,因为这是我的第一篇文章,如果您需要任何其他信息,请告诉我。

标签: google-chrome indexeddb


【解决方案1】:

在请求中触发的“success”并不表示事务已成功提交。由于单独的失败请求(例如冲突的 add 调用)、I/O 错误或例如功率损耗。

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

【讨论】:

    猜你喜欢
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 2017-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-17
    • 2012-03-01
    相关资源
    最近更新 更多