Что такое "DOMException: запись уже существует"?
tl;dr В моем веб-приложении появляется ошибка "DOMException: запись уже существует", и я понятия не имею, что это значит. Я не смог найти объяснение этой ошибке в интернете; возможно мой googlefoo неадекватен.
Более длинная версия.
У меня довольно простое приложение todolist es6, которое
- хранит вещи локально в IndexedDB и
- использует работника службы для перехвата выборки в "/sync" для запуска некоторого кода, который синхронизирует IndexedDB с сервером.
- использует работника сервиса для кэширования главной страницы (используя cache.put, который не должен жаловаться, если запись в кэше уже существует)
Все отлично работает. Но каждый раз, когда работник службы выдает ошибки...
Uncaught (in promise) TypeError: network error at TypeError (native) (program:1)
Uncaught (in promise) DOMException: Entry already exists. (program:1)
... chrome (45.0.2454.93 (64-разрядная версия) в Ubuntu) замедляет сканирование, и ничего не работает, пока я не перейду к chrome://serviceworker-internals и не остановлю работника сервиса. После этого все в порядке еще пару дней.
Трудно отладить, так как ошибка не говорит мне, какая строка моего кода инициировала проблему.
1 ответ
Как отмечено в комментариях, но ответить более определенно:
Это было связано с ошибкой, специфичной для Windows, в реализации Cache API в Chrome - https://crbug.com/542668
Выполняется исправление, с добавлением кода. Исправление должно пройти через нормальный процесс выпуска Chrome - сборка Canary через день или два, бета-версия через несколько недель и стабильная версия через 6 недель после этого.