Нужно ли мне обновлять страницу, чтобы увидеть, была ли сброшена индексированная БД?

Я начал работать с Indexed DB для HTML 5, но получил странные результаты. Во-первых, я пытаюсь очистить свою базу данных, но вижу, что она была сброшена, только если обновляю сайт. Так должно быть? Я видел другие примеры кодов, в которых этого не происходит.

Вызывается onsuccess, но показанная БД методом обновления такая же, как и раньше...

Вот моя функция сброса:

function resetDB() 
{
    try
    {       
        if (localDatabase != null && localDatabase.db != null) 
        {
            var store = localDatabase.db.transaction("patients", "readwrite").objectStore("patients");                    

            store.clear().onsuccess = function(event) 
            {
                alert("Patients DB cleared");
                update_patients_stored();
            };
        }
    }
    catch(e)
    {
        alert(e);
    }
}

person the_moon    schedule 19.11.2013    source источник


Ответы (1)


onsuccess может срабатывать до того, как результаты будут фактически обновлены в базе данных (см. этот ответ на вопрос, который я задал здесь). Итак, если update_patients_stored читает из базы данных, он может по-прежнему видеть старые данные.Если вы используете транзакцию oncomplete, у вас не будет этой проблемы.

Если это действительно вызывает вашу проблему, это исправит ее:

            var tx = localDatabase.db.transaction("patients", "readwrite");                    

            tx.objectStore("patients").clear();

            tx.oncomplete = function(event) 
            {
                alert("Patients DB cleared");
                update_patients_stored();
            };
person dumbmatter    schedule 20.11.2013
comment
Спасибо, Джереми. Я этого не знал. Тем не менее, то же самое происходит снова. Запускается событие oncomplete, и БД очищается (это действительно странно)... Опять же, я вижу, что БД очищалась только после перезагрузки страницы... Как такое возможно? То же самое происходит при удалении пациента с его идентификатором (stackoverflow.com/questions/20078724/) - person the_moon; 20.11.2013
comment
Я понял! Проблема заключалась в том, что мне нужно использовать событие oncomplete для обновления пользовательского интерфейса... Кроме того, у меня есть небольшая проблема в моей функции обновления. Благодарю вас! - person the_moon; 20.11.2013