@@ -659,13 +659,28 @@ export class SimpleDbStore<
659
659
indexOrRange ?: string | IDBKeyRange ,
660
660
range ?: IDBKeyRange
661
661
) : PersistencePromise < ValueType [ ] > {
662
- const cursor = this . cursor ( this . options ( indexOrRange , range ) ) ;
663
- const results : ValueType [ ] = [ ] ;
664
- return this . iterateCursor ( cursor , ( key , value ) => {
665
- results . push ( value ) ;
666
- } ) . next ( ( ) => {
667
- return results ;
668
- } ) ;
662
+ const iterateOptions = this . options ( indexOrRange , range ) ;
663
+ // Use `getAll()` if the browser supports IndexedDB v3, as it is roughly
664
+ // 20% faster. Unfortunately, getAll() does not support custom indices.
665
+ if ( ! iterateOptions . index && typeof this . store . getAll === 'function' ) {
666
+ const request = this . store . getAll ( iterateOptions . range ) ;
667
+ return new PersistencePromise ( ( resolve , reject ) => {
668
+ request . onerror = ( event : Event ) => {
669
+ reject ( ( event . target as IDBRequest ) . error ! ) ;
670
+ } ;
671
+ request . onsuccess = ( event : Event ) => {
672
+ resolve ( ( event . target as IDBRequest ) . result ) ;
673
+ } ;
674
+ } ) ;
675
+ } else {
676
+ const cursor = this . cursor ( iterateOptions ) ;
677
+ const results : ValueType [ ] = [ ] ;
678
+ return this . iterateCursor ( cursor , ( key , value ) => {
679
+ results . push ( value ) ;
680
+ } ) . next ( ( ) => {
681
+ return results ;
682
+ } ) ;
683
+ }
669
684
}
670
685
671
686
deleteAll ( ) : PersistencePromise < void > ;
0 commit comments