Я периодически получаю это сообщение об ошибке в относительно большом проекте в произвольное время (что заставляет меня подозревать состояние гонки где-то...), поэтому, к сожалению, у меня нет минимального примера, иллюстрирующего эту проблему, поскольку я не понимаю основная причина. По сути, иногда я получаю сигнал об ошибке, где event.target.webkitErrorMessage
— это «Внутренняя ошибка проверки существования ключа». Но я действительно не понимаю, что это сообщение об ошибке вообще должно означать.
Поиск этой фразы в Google дает только 7 результатов (хотя это будет больше, когда Google и другие найдут этот вопрос). Все эти результаты являются либо исходным кодом Chromium, либо отчетами об ошибках с добавлением более подробных сообщений об ошибках в Chromium. Поскольку я не очень хорошо знаком с реализацией серверной части IndexedDB в Chromium, я изо всех сил пытаюсь понять, что означает это сообщение об ошибке с точки зрения внешнего кода JavaScript. Например, какие ошибки JavaScript могут привести к такому сообщению об ошибке?
Рассматриваемый код, кажется, отлично работает в Firefox, FWIW.
РЕДАКТИРОВАНИЕ НИЖЕ
Я также, реже, получаю null в качестве курсора в ответ на запрос openCursor
для ключа, который, как я знаю, является реальным ключом. Это тоже непоследовательно - бывает для разных ключей и редко. И это тоже только в Хроме. Очень странно.
И я не уверен, что это уместно, но все это происходит в рамках большой транзакции со многими update
в двух хранилищах объектов (это те, которые приводят к нулевым проблемам openCursor
) и многими add
в другом хранилище объектов (похоже, это источник ошибки «Внутренняя ошибка проверки существования ключа»). Я попытаюсь сделать минимальный пример этого и продолжить расследование, но независимо от того, как это получится, я все же хотел бы знать ответ на мой первоначальный вопрос, что именно означает «Внутренняя ошибка проверки существования ключа».
ДРУГОЕ ИЗМЕНЕНИЕ
Поиграв еще немного, я столкнулся с другим странным временным сообщением об ошибке: «Внутренняя ошибка: ошибка резервного хранилища при выполнении ввода / добавления». Мне также было бы любопытно узнать, что это означает для моего JavaScript.
Кроме того, я подтвердил, что все эти проблемы являются новыми для Chrome 26 (и остаются в Chrome 27). При переходе на Chrome 25 все эти проблемы исчезают... так что, возможно, это все из-за какой-то ошибки в Chrome...
ЕЩЕ ОДНА ПРАВКА
Все эти проблемы возникают только в Linux (я использую Ubuntu 12.10). На виртуальной машине Windows XP с Chrome 26 я не могу воспроизвести ни одну из этих ошибок. Я отправил отчет об ошибке, поскольку становится все более очевидным, что это все из-за какой-то ошибки, но я не уверен, что достаточно сузил проблему, чтобы помочь найти решение.
onerror
обратный вызовIDBRequest
? Вы также проверилиrequest.error
илиevent.target.error
? Насколько я помню, единственная допустимая ошибка API IndexedDB —ConstraintError
. - person Kyaw Tun   schedule 06.04.2013onerror
дляIDBRequest
.event.target.error.name
говорит, что этоUnknownError
(я не думаю, чтоConstraintError
— единственное возможное значение, так как в дополнение к этому я также вижуAbortError
для запросов после прерывания транзакции).event.target.webkitErrorMessage
содержит дополнительную информацию, но, как я описал в своем посте, это ошибка сообщения не кажутся документированными с пользой. - person dumbmatter   schedule 06.04.2013UnknownError
это ошибка ввода-вывода, не так ли? Я также столкнулся с проблемой Chrome только при больших или нескольких транзакциях. Если бы я мог воспроизвести их, я бы зарегистрировал ошибку в проекте хрома. Пока еще пытаюсь воспроизвести в виде юнит-теста. Однако его можно легко воспроизвести в приложении. Обходной путь так же прост, как сделать транзакцию короткой. - person Kyaw Tun   schedule 06.04.2013