> For the complete documentation index, see [llms.txt](https://dexiejs.typogram.co/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dexiejs.typogram.co/dexieerror.md).

# DexieError

*since v.1.3.3*

```javascript
class DexieError extends Error {}
```

Acts as the base class for exceptions that can be returned in rejected Dexie promises.

#### Inheritance Hierarchy

* [Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error)
  * [SyntaxError](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/SyntaxError)
  * [TypeError](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypeError)
  * [RangeError](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RangeError)
  * Dexie.DexieError
    * Dexie.AbortError
    * Dexie.BulkError
    * Dexie.ConstraintError
    * Dexie.DatabaseClosedError
    * Dexie.DataCloneError
    * Dexie.DataError
    * *Dexie.IncompatiblePromiseError (Obsolete since v2.0.0)*
    * Dexie.InternalError
    * Dexie.InvalidAccessError
    * Dexie.InvalidArgumentError
    * Dexie.InvalidStateError
    * Dexie.InvalidTableError
    * Dexie.MissingAPIError
    * Dexie.ModifyError
    * Dexie.NoSuchDatabaseError
    * Dexie.NotFoundError
    * Dexie.OpenFailedError
    * Dexie.QuotaExceededError
    * Dexie.PrematureCommitError
    * Dexie.ReadOnlyError
    * Dexie.SchemaError
    * Dexie.SubTransactionError
    * Dexie.TimeoutError
    * Dexie.TransactionInactiveError
    * Dexie.UpgradeError
    * Dexie.UnknownError
    * Dexie.UnsupportedError
    * Dexie.VersionChangeError
    * Dexie.VersionError

#### Sample

```javascript
doSomeDatabaseWork().then(function(){
    //
    // Success
    //
}).catch('ModifyError', function (e) {
    //
    // Failed with ModifyError. Check out e.failures
    //
    console.error ("ModifyError occurred: " + e.failures.length + " failures"); +
}).catch('ConstraintError', function (e) {
    //
    // Failed with ConstraintError
    //
    console.error ("Error: " + e.message);
}).catch(function (e) {
    //
    // Other error such as a string was thrown
    //
    console.error ("Other unknown error caught: " + e);
});
```

#### Sample: switch(error.name)

```javascript
doSomeDatabaseWork().then(function(){
    // Success
}).catch(function (error) {
    switch (error.name) {
        case "UpgradeError": // or case Dexie.errnames.Upgrade: ...
            console.error ("Upgrade error");
            break;
        case "ModifyError": // or case Dexie.errnames.Modify: ...
            console.error ("Modify error");
            break;
        case ...

        default:
            console.error ("error: " + e);
    }
});
```

#### Properties

| name: string    | Name of the error                                                                  |
| --------------- | ---------------------------------------------------------------------------------- |
| message: string | Detailed message                                                                   |
| inner?: any     | Inner exception instance (if any)                                                  |
| stack?: string  | Can be present if the error was thrown. If signaled, there wont be any call stack. |

#### Catching Errors Affect Transaction

If explicitly catching an error, the ongoing transaction will NOT abort. If that is not your desire, for example if you are just catching the error for logging purpose, you should rethrow the error after logging it.

The catch effect also applies when using yield or async / await and a standard try..catch.

#### Sample of rethrowing error

```javascript
db.transaction('rw', db.friends, function() {
    db.friends.add({id: 1, name: "Orvar", age: 3}).catch(function (e) {
        console.error ("Could not add Orvar");
        throw e; // Rethrowing so that transaction is indeed aborted.
    });
});

// Or with yield
db.transaction('rw', db.friends, function*() {
    try {
        yield db.friends.add({id: 1, name: "Orvar", age: 3});
    } catch (e) {
        console.error ("Could not add Orvar");
        throw e; // Rethrowing so that transaction is indeed aborted.
    });
});
```
