12
12
13
13
export function open ( dbName , version , upgradeCallback ) {
14
14
return new Promise ( ( resolve , reject ) => {
15
- // don't call open with 2 arguments, when version is not set
16
- const req = version ? idb ( ) . open ( dbName , version ) : idb ( ) . open ( dbName )
17
- req . onblocked = ( e ) => {
18
- const resume = new Promise ( ( res , rej ) => {
19
- // We overwrite handlers rather than make a new
20
- // open() since the original request is still
21
- // open and its onsuccess will still fire if
22
- // the user unblocks by closing the blocking
23
- // connection
24
- req . onsuccess = ev => res ( ev . target . result )
25
- req . onerror = ev => {
26
- ev . preventDefault ( )
27
- rej ( ev . target . error )
15
+ let isFirst = true
16
+ const openDb = ( ) => {
17
+ // don't call open with 2 arguments, when version is not set
18
+ const req = version ? idb ( ) . open ( dbName , version ) : idb ( ) . open ( dbName )
19
+ req . onblocked = ( e ) => {
20
+ if ( isFirst ) {
21
+ isFirst = false
22
+ setTimeout ( openDb , 100 )
23
+ return
28
24
}
29
- } )
30
- e . resume = resume
31
- reject ( e )
32
- }
33
- if ( typeof upgradeCallback === 'function' ) {
34
- req . onupgradeneeded = e => {
35
- upgradeCallback ( e )
25
+ const resume = new Promise ( ( res , rej ) => {
26
+ // We overwrite handlers rather than make a new
27
+ // open() since the original request is still
28
+ // open and its onsuccess will still fire if
29
+ // the user unblocks by closing the blocking
30
+ // connection
31
+ req . onsuccess = ev => res ( ev . target . result )
32
+ req . onerror = ev => {
33
+ ev . preventDefault ( )
34
+ rej ( ev )
35
+ }
36
+ } )
37
+ e . resume = resume
38
+ reject ( e )
39
+ }
40
+ if ( typeof upgradeCallback === 'function' ) {
41
+ req . onupgradeneeded = e => {
42
+ upgradeCallback ( e )
43
+ }
44
+ }
45
+ req . onerror = ( e ) => {
46
+ e . preventDefault ( )
47
+ reject ( e )
48
+ }
49
+ req . onsuccess = ( e ) => {
50
+ resolve ( e . target . result )
36
51
}
37
52
}
38
- req . onerror = ( e ) => {
39
- e . preventDefault ( )
40
- reject ( e )
41
- }
42
- req . onsuccess = ( e ) => {
43
- resolve ( e . target . result )
44
- }
53
+ openDb ( )
45
54
} )
46
55
}
47
56
@@ -59,9 +68,15 @@ export function del(db) {
59
68
const dbName = typeof db !== 'string' ? db . name : db
60
69
61
70
return new Promise ( ( resolve , reject ) => {
71
+ let isFirst = true
62
72
const delDb = ( ) => {
63
73
const req = idb ( ) . deleteDatabase ( dbName )
64
74
req . onblocked = ( e ) => {
75
+ if ( isFirst ) {
76
+ isFirst = false
77
+ setTimeout ( delDb , 100 )
78
+ return
79
+ }
65
80
// The following addresses part of https://bugzilla.mozilla.org/show_bug.cgi?id=1220279
66
81
e = e . newVersion === null || typeof Proxy === 'undefined' ? e : new Proxy ( e , { get : ( target , name ) => {
67
82
return name === 'newVersion' ? null : target [ name ]
@@ -81,7 +96,6 @@ export function del(db) {
81
96
if ( ! ( 'oldVersion' in ev ) ) {
82
97
ev . oldVersion = e . oldVersion
83
98
}
84
-
85
99
res ( ev )
86
100
}
87
101
req . onerror = ev => {
0 commit comments