У меня проблема с IndexedDB в Chrome, когда я перезагружаю свою страницу после того, как транзакция вернет успешную запись.
Проблема иногда в том, что данные не отображаются после перезагрузки. Я могу решить эту проблему, задав тайм-аут около 100 мс перед перезагрузкой, что наводит меня на мысль, что данные не сбрасываются на диск каждый раз.
Firexox имеет экспериментальный режим чтения, записи и очистки, который гарантирует, что данные сбрасываются на диск перед возвратом успешного вызова, но, похоже, не может найти аналогичный для 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.info('Data was successfully saved locally: ' + type);
if (callback != undefined) {
callback();
}
};
В обратном вызове выполняется location.reload = '/'; (вместе с некоторыми другими вещами), поэтому страница перезагружается после возврата onsuccess.
После перезагрузки страницы я не вижу никаких данных в моем хранилище IndexedDB, как с помощью кода, так и с помощью инструментов разработчика. Однако это не всегда происходит, я заметил, что это происходит только тогда, когда объем данных больше, чем обычно.
@Josh надеюсь, что это изменение поможет, пожалуйста, не теряйте меня, так как это мой первый пост, и дайте мне знать, если вам понадобится дополнительная информация.





"Success", запущенное по запросу, не означает, что транзакция была успешно зафиксирована. Позднее транзакция может завершиться неудачно из-за отдельного неудачного запроса (например, конфликтующего вызова добавления), ошибки ввода-вывода или, например, потеря мощности.
Вам нужно подождать, пока для транзакции не сработает событие «complete». Chrome сбрасывает на диск перед запуском события «complete».
Опубликуйте код, связанный с хранением данных, которые вы ожидаете увидеть, и код, связанный с чтением данных, которые вы ожидаете найти после перезагрузки.