The IDBRequest interface of the IndexedDB API provides access to results of asynchronous requests to databases and database objects using event handler attributes. Each reading and writing operation on a database is done using a request.
The request object does not initially contain any information about the result of the operation, but once information becomes available, an event is fired on the request, and the information becomes available through the properties of the IDBRequest instance.
All asynchronous operations immediately return an IDBRequest instance. Each request has a readyState that is set to the 'pending' state; this changes to 'done' when the request is completed or fails. When the state is set to done, every request returns aresult and an error, and an event is fired on the request. When the state is still pending, any attempt to access the result or error raises an InvalidStateError exception.
In plain words, all asynchronous methods return a request object. If the request has been completed successfully, the result is made available through the result property and an event indicating success is fired at the request (IDBRequest.onsuccess). If an error occurs while performing the operation, the exception is made available through the result property and an error event is fired (IDBRequest.onerror).
The interface IDBOpenDBRequest is derived from IDBRequest.
<div id="interfaceDiagram" style="display: inline-block; position: relative; width: 100%; padding-bottom: 11.666666666666666%; vertical-align: middle; overflow: hidden;"><svg style="display: inline-block; position: absolute; top: 0; left: 0;" viewbox="-50 0 600 70" preserveAspectRatio="xMinYMin meet"><a xlink:href="https://developer.mozilla.org/en-US/docs/Web/API/EventTarget" target="_top"><rect x="1" y="1" width="110" height="50" fill="#fff" stroke="#D4DDE4" stroke-width="2px" /><text x="56" y="30" font-size="12px" font-family="Consolas,Monaco,Andale Mono,monospace" fill="#4D4E53" text-anchor="middle" alignment-baseline="middle">EventTarget</text></a><polyline points="111,25 121,20 121,30 111,25" stroke="#D4DDE4" fill="none"/><line x1="121" y1="25" x2="151" y2="25" stroke="#D4DDE4"/><a xlink:href="https://developer.mozilla.org/en-US/docs/Web/API/IDBRequest" target="_top"><rect x="151" y="1" width="100" height="50" fill="#F4F7F8" stroke="#D4DDE4" stroke-width="2px" /><text x="201" y="30" font-size="12px" font-family="Consolas,Monaco,Andale Mono,monospace" fill="#4D4E53" text-anchor="middle" alignment-baseline="middle">IDBRequest</text></a></svg></div>
a:hover text { fill: #0095DD; pointer-events: all;}
Properties
Also inherits properties from EventTarget.
IDBRequest.errorRead only- Returns an error in the event of an unsuccessful request, indicating what went wrong.
IDBRequest.resultRead only-
Returns the result of the request. If the the request failed and the result is not available, an InvalidStateError exception is thrown.
IDBRequest.sourceRead only- The source of the request, such as an
IDBIndexor anIDBObjectStore. If no source exists (such as when callingIDBFactory.open), it returns null. IDBRequest.readyStateRead only- The state of the request. Every request starts in the
pendingstate. The state changes todonewhen the request completes successfully or when an error occurs. IDBRequest.transactionRead only- The transaction for the request. This property can be null for certain requests, for example those returned from
IDBFactory.openunless an upgrade is needed. (You're just connecting to a database, so there is no transaction to return).
Event handlers
IDBRequest.onerror- The event handler for the error event.
IDBRequest.onsuccess- The event handler for the success event.
Methods
No methods, but inherits methods from EventTarget.
Example
In the following code snippet, we open a database asynchronously and make a request; onerror and onsuccess functions are included to handle the success and error cases. For a full working example, see our To-do Notifications app (view example live.)
var db;
// Let us open our database
var DBOpenRequest = window.indexedDB.open("toDoList", 4);
// these two event handlers act on the database being
// opened successfully, or not
DBOpenRequest.onerror = function(event) {
note.innerHTML += '<li>Error loading database.</li>';
};
DBOpenRequest.onsuccess = function(event) {
note.innerHTML += '<li>Database initialised.</li>';
// store the result of opening the database.
db = DBOpenRequest.result;
};
Specifications
| Specification | Status | Comment |
|---|---|---|
| Indexed Database API The definition of 'IDBRequest' in that specification. |
Recommendation | Initial definition. |
| Indexed Database API 2.0 The definition of 'IDBRequest' in that specification. |
Editor's Draft |
Browser compatibility
| Feature | Chrome | Edge | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
|---|---|---|---|---|---|---|
| Basic support | 23webkit 24 (unprefixed) 38 (prefixes deprecated) 57 (prefixes removed) |
(Yes) | 10 moz 16.0 (16.0) |
10, partial | 15 44 (prefixes removed) |
7.1 |
| Available in workers | (Yes) (unprefixed) 38 (prefixes deprecated) 57 (prefixes removed) |
? | 37.0 (37.0) | ? | (Yes) 44 (prefixes removed) |
? |
| Indexed Database 2.0 | 58 | ? | ? | ? | 45 | ? |
| Feature | Android Webview | Chrome for Android | Edge | Firefox Mobile (Gecko) | Firefox OS | IE Phone | Opera Mobile | Safari Mobile |
|---|---|---|---|---|---|---|---|---|
| Basic support | (Yes) 38 (prefixes deprecated) 57 (prefixes removed) |
(Yes) 38 (prefixes deprecated) 57 (prefixes removed) |
(Yes) | 22.0 (22.0) | 1.0.1 | 10 | 22 44 (prefixes removed) |
8 |
| Available in workers | (Yes) (unprefixed) 38 (prefixes deprecated) 57 (prefixes removed) |
(Yes) (unprefixed) 38 (prefixes deprecated) 57 (prefixes removed) |
? | 37.0 (37.0) | (Yes) | ? | (Yes) 44 (prefixes removed) |
? |
| Indexed Database 2.0 | 58 | 58 | ? | ? | ? | ? | 45 | ? |
See also
- Using IndexedDB
- Starting transactions:
IDBDatabase - Using transactions:
IDBTransaction - Setting a range of keys:
IDBKeyRange - Retrieving and making changes to your data:
IDBObjectStore - Using cursors:
IDBCursor - Reference example: To-do Notifications (view example live.)