IDBRequest: свойство error
Базовая Широко доступная *
Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузера. Она доступна во всех браузерах с сентября 2021 года.
* Некоторые части этой функции могут иметь различный уровень поддержки.
Примечание: Эта функция доступна в Web Workers.
Чтение-только свойство error интерфейса IDBRequest возвращает ошибку в случае неудачного запроса.
Значение
Объект DOMException или null в случае отсутствия ошибки. Объект исключения будет иметь одно из следующих имен, в зависимости от причины ошибки.
Эти ошибки асинхронные, что означает, что их нельзя обработать с помощью try...catch. Однако, если у IDBRequest есть обработчик события error, вы все равно можете проверить такие ошибки, запросив свойство error запроса через объект события, например event.target.error.name или event.target.error.message.
AbortError-
Если вы прервали транзакцию, все запросы, которые все еще выполняются, получат эту ошибку.
ConstraintError-
Получается, если вы вставляете данные, которые не соответствуют ограничению при заполнении хранилищ. Например, вы получите эту ошибку, если попытаетесь добавить новый ключ, который уже существует в хранилище.
NotReadableError-
Получается для ошибок чтения, которые нельзя исправить. В частности, эта ошибка указывает на то, что запись присутствует в базе данных, но значение не удалось получить. См. Временные и невосстановимые ошибки чтения ниже для получения дополнительной информации.
QuotaExceededError-
Получается, если приложение исчерпало квоту дискового пространства. В некоторых случаях браузеры предлагают пользователю больше места, и ошибка получается, если они отклоняют запрос. В других случаях браузер использует эвристику, чтобы определить, можно ли выделить больше места.
UnknownError-
Получается для временных ошибок чтения, включая общие ошибки ввода-вывода на диске. См. Временные и невосстановимые ошибки чтения ниже для получения дополнительной информации.
VersionError-
Получается, если вы пытаетесь открыть базу данных с версией ниже, чем у нее уже есть.
Временные и невосстановимые ошибки чтения
Ошибки чтения возникают, когда хранилище IndexedDB сохраняет значения, а затем не удается прочитать эти значения, хотя связанные записи все еще находятся в базе данных.
Ошибки чтения могут быть двух типов — временные или невосстановимые:
Временные ошибки чтения сигнализируются типом UnknownError, и обычно вызваны нехваткой памяти. Это не должно быть проблемой для небольших баз данных. Чтобы избежать ситуаций с нехваткой памяти в больших базах данных, попробуйте разбить доступ к базе данных, чтобы загружать только необходимые записи в любое время, например, используя определенные диапазоны ключей, относящиеся к запросу пользователя или механизму постраничной навигации. Если произойдет ошибка из-за нехватки памяти, пользователю может быть предложено закрыть другие приложения, чтобы освободить место на уровне операционной системы.
Невосстановимые ошибки чтения сигнализируются типом NotReadableError, и вызваны удалением исходных файлов.
Например, некоторые браузеры хранят большие значения (например, аудиофайлы-BLOB для автономного приложения для подкастов) как отдельные файлы, к которым осуществляется доступ через ссылку, хранящуюся в базе данных. Было замечено, что эти отдельные файлы могут быть удалены, потому что они отображаются как непрозрачные файлы для пользователей, когда они используют программы восстановления дискового пространства, что приводит к невосстановимым ошибкам чтения при следующем доступе к IndexedDB.
Возможные меры по исправлению невосстановимых ошибок чтения могут включать уведомление пользователя, удаление записи из базы данных, а затем попытку повторного извлечения данных с сервера.
Исключения
-
InvalidStateErrorDOMException -
Выбрасывается при попытке доступа к свойству, если запрос не завершен, и, следовательно, ошибка недоступна.
Примеры
В следующем примере запрашивается заданный заголовок записи, onsuccess извлекается связанная запись из IDBObjectStore (доступная как objectStoreTitleRequest.result), обновляется одно свойство записи, а затем обновленная запись помещается обратно в хранилище объектов. Также внизу находится функция onerror, которая сообщает, в чем заключалась ошибка, если запрос завершился неудачно. Для полного рабочего примера см. наше приложение To-do Notifications (Посмотреть пример вживую).
const title = "Walk dog";
// Open up a transaction as usual
const objectStore = db
.transaction(["toDoList"], "readwrite")
.objectStore("toDoList");
// Get the to-do list with the specified title
const objectStoreTitleRequest = objectStore.get(title);
objectStoreTitleRequest.onsuccess = () => {
// Grab the data object returned as the result
const data = objectStoreTitleRequest.result;
// Update the notified value in the object to "yes"
data.notified = "yes";
// Create another request that inserts the item
// back into the database
const updateTitleRequest = objectStore.put(data);
// When this new request succeeds, run the displayData()
// function again to update the display
updateTitleRequest.onsuccess = () => {
displayData();
};
};
objectStoreTitleRequest.onerror = () => {
// If an error occurs with the request, log what it is
console.log(
`There has been an error with retrieving your data:
${objectStoreTitleRequest.error.name}: ${objectStoreTitleRequest.error.message}`,
);
};
Спецификации
Совместимость браузеров
| Рабочие столы | Мобильные | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на IOS | Samsung Internet | WebView Android | |
DOMException |
48 | ≤18 | 58 | 35 | Нет | 48 | 58 | 35 | Нет | 5.0 | 48 |
error |
23 | 12 | 10 | 15 | 8 | 25 | 22 | 14 | 8 | 1.5 | 4.4 |
transient_unrecoverable_read_errors |
132Возвращает исключениеNotReadableError для невосстановимых ошибок чтения и UnknownError для временных ошибок чтения.130Возвращает исключениеNotFoundError для невосстановимых ошибок чтения и DataError для временных ошибок чтения. |
Нет | 14 |
117Возвращает исключениеNotReadableError для невосстановимых ошибок чтения и UnknownError для временных ошибок чтения.115Возвращает исключениеNotFoundError для невосстановимых ошибок чтения и DataError для временных ошибок чтения. |
8 |
132Возвращает исключениеNotReadableError для невосстановимых ошибок чтения и UnknownError для временных ошибок чтения.130Возвращает исключениеNotFoundError для невосстановимых ошибок чтения и DataError для временных ошибок чтения. |
22 | 86Возвращает исключениеNotFoundError для невосстановимых ошибок чтения и DataError для временных ошибок чтения. |
8 | Нет |
132Возвращает исключениеNotReadableError для невосстановимых ошибок чтения и UnknownError для временных ошибок чтения.130Возвращает исключениеNotFoundError для невосстановимых ошибок чтения и DataError для временных ошибок чтения. |
См. также
- Использование IndexedDB
- Начало транзакций:
IDBDatabase - Использование транзакций:
IDBTransaction - Указание диапазона ключей:
IDBKeyRange - Извлечение и внесение изменений в данные:
IDBObjectStore - Использование курсоров:
IDBCursor - Пример ссылки: To-do Notifications (Посмотреть пример вживую).
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/IDBRequest/error