解锁 IndexedDB
Unblock IndexedDB
正在尝试使用 IndexedDB。我写了一个函数来创建新的 Table 和索引并带回回调。
但是当我尝试使用该功能时,它停止工作 - 在 onsuccess
状态之后我得到 onblocked
状态而 onupgradeneeded
没有 运行...
如何避免阻塞数据库?
crtTable(db_name, table, indexes, callback) {
console.log("Initiate table creation");
let isSupport:boolean = this.checkDbSupport();
if(!isSupport) return;
let version;
let openRequest = indexedDB.open(db_name);
openRequest.onsuccess = (event) => {
console.log("Opening DB and find version");
version = (event.target as any).result.version;
//I GOT DB VERSION AND NOW I TRYING TO CLOSE IT!
(event.target as any).result.close();
version++;
console.log("reopen DB with new version")
let openRequest = indexedDB.open(db_name, version);
openRequest.onblocked = (event) => {
console.log("blocked");
}
openRequest.onupgradeneeded = (event) => {
console.log("update running")
let db = (event.target as any).result;
let transaction = db.createObjectStore(table[0], { keyPath: table[1] });
for(let index of indexes) {
transaction.createIndex(index[0], index[0], { unique: index[1] });
}
transaction.oncomplete = (event) => {
console.log("indexes setted");
}
callback("updated");
console.log("updated");
};
openRequest.onsuccess = (event) => {
openRequest.result.close();
callback("success");
console.log("success");
};
openRequest.onerror = (event) => {
openRequest.result.close();
callback("error");
console.log("error");
};
};
}
在将数据库升级到新版本之前,您必须关闭其他数据库连接。
The IDBOpenDBRequest.onblocked event handler is the event handler for the blocked event. This event is triggered when the upgradeneeded should be triggered because of a version change but the database is still in use (that is, not closed) somewhere, even after the versionchange event was sent.
https://developer.mozilla.org/en-US/docs/Web/API/IDBOpenDBRequest/onblocked
更新:
您正试图在 onsuccess
和 onerror
事件上关闭它,但由于数据库已经打开而未被调用,它调用 onblocked
事件尝试在 onblocked
事件也是如此。
openRequest.onblocked = (event) => {
(event.target as any).result.close();
console.log("blocked");
}
正在尝试使用 IndexedDB。我写了一个函数来创建新的 Table 和索引并带回回调。
但是当我尝试使用该功能时,它停止工作 - 在 onsuccess
状态之后我得到 onblocked
状态而 onupgradeneeded
没有 运行...
如何避免阻塞数据库?
crtTable(db_name, table, indexes, callback) {
console.log("Initiate table creation");
let isSupport:boolean = this.checkDbSupport();
if(!isSupport) return;
let version;
let openRequest = indexedDB.open(db_name);
openRequest.onsuccess = (event) => {
console.log("Opening DB and find version");
version = (event.target as any).result.version;
//I GOT DB VERSION AND NOW I TRYING TO CLOSE IT!
(event.target as any).result.close();
version++;
console.log("reopen DB with new version")
let openRequest = indexedDB.open(db_name, version);
openRequest.onblocked = (event) => {
console.log("blocked");
}
openRequest.onupgradeneeded = (event) => {
console.log("update running")
let db = (event.target as any).result;
let transaction = db.createObjectStore(table[0], { keyPath: table[1] });
for(let index of indexes) {
transaction.createIndex(index[0], index[0], { unique: index[1] });
}
transaction.oncomplete = (event) => {
console.log("indexes setted");
}
callback("updated");
console.log("updated");
};
openRequest.onsuccess = (event) => {
openRequest.result.close();
callback("success");
console.log("success");
};
openRequest.onerror = (event) => {
openRequest.result.close();
callback("error");
console.log("error");
};
};
}
在将数据库升级到新版本之前,您必须关闭其他数据库连接。
The IDBOpenDBRequest.onblocked event handler is the event handler for the blocked event. This event is triggered when the upgradeneeded should be triggered because of a version change but the database is still in use (that is, not closed) somewhere, even after the versionchange event was sent.
https://developer.mozilla.org/en-US/docs/Web/API/IDBOpenDBRequest/onblocked
更新:
您正试图在 onsuccess
和 onerror
事件上关闭它,但由于数据库已经打开而未被调用,它调用 onblocked
事件尝试在 onblocked
事件也是如此。
openRequest.onblocked = (event) => {
(event.target as any).result.close();
console.log("blocked");
}