Когда мы хотим обрабатывать ошибки IndexedDB на уровне транзакции, у нас есть два варианта: обработчики onabort и onerror.
В чем разница между ними?
MDN не очень полезен; это только говорит:
Consider using
IDBTransaction.onabortinstead to handle non- successful completion of the transaction.
Означает ли это, что обработчик onerror будет обрабатывать только подмножество ошибок, которые будут обрабатываться обработчиком onabort?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Событие error запускается при неудачном запросе (экземпляр IDBRequest); он поднимается от запроса к транзакции запроса (IDBTransaction) к соединению транзакции (IDBDatabase). В любой момент это может быть зарегистрировано, и поведение по умолчанию (прерывание транзакции) можно предотвратить, если это необходимо, путем вызова preventDefault().
Событие abort запускается в транзакции, которая была прервана. Событие complete запускается как транзакция, которая успешно зафиксирована.
Транзакция может завершиться неудачно по причинам, не связанным с конкретным запросом (например, превышение квоты, ошибка ввода-вывода и т. д.). Поэтому, если вы хотите знать, что транзакция не удалась, следите за событиями abort. Точно так же, поскольку ваша логика может предотвратить поведение по умолчанию ошибки запроса, прерывающее транзакцию, просмотр события error в транзакции не говорит вам, будет ли транзакция в конечном итоге успешной или нет.
Не совсем. Для запроса onsuccess похож на then (), а onerror похож на catch (). Для транзакции oncomplete похож на then (), а onabort похож на catch ().
просто чтобы убедиться, что я правильно понял: предполагая, что я использую обещание then и catch как параллель с успехом / неудачей транзакции: onSuccess - это параллель с then, а onAbort - это параллель с catch, верно? (где onerror относится к запросу, поэтому он не является частью того же цикла)