IndexedDB在Chrome上刷新到磁盘

时间:2018-04-11 04:10:20

标签: google-chrome indexeddb

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

问题有时候重新加载后数据不会反映出来。我可以通过在重新加载之前给出大约100ms的超时来解决这个问题,这使我相信每次都不会将数据刷新到磁盘。

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存储上看到任何数据。然而,这并不总是发生,我发现只有当数据比平时更大时才会发生这种情况。

1 个答案:

答案 0 :(得分:1)

"成功"在请求中触发并不表示事务已成功提交。该事务稍后可能由于单独的失败请求(例如,冲突的添加调用),I / O错误或例如错误而失败。功率损失。

你需要等待"完成"在交易中被解雇的事件。在点击"完成"之前,Chrome会刷新到磁盘。事件

相关问题