Что такое "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 недель после этого.

Другие вопросы по тегам