nun*_*uno 3 javascript upgrade indexeddb
我正在尝试实现一个 IndexedDB 接口,该接口允许用户将数据从以前的数据库(DB)版本(在处理程序oldVersion中检测到)迁移到最新版本(即将打开),这意味着我需要:onupgradeneededevent.target.oldVersioncurrentVersion
currentVersion打开操作oldVersion在 中检测到onupgradeneeded)currentVersion)我在打开时遇到问题oldVersion,因为我无法中止(异常 11)currentVersion升级事件(它也是不可取消的)。
异常 11:在不允许的对象上或在不允许的时间调用操作。
是否可以以某种方式取消或中止 的升级事件currentVersion,以便我打开oldVersion...?
注意:...如果没有,是否有其他方法可以从我缺少的旧版本数据库迁移数据?
是否可以以某种方式取消或中止当前版本的升级事件,以便我打开旧版本...?
var rq = indexedDB.open(name, ver);
rq.onupgradeneeded = function(e) {
rq.transaction.abort();
};
rq.onsuccess = function(e) { console.log('THIS SHOULD NOT RUN'); };
rq.onerror = function(e) { console.log('This should run'); };
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以从我丢失的旧版本数据库迁移数据?
通常这就是整个目的upgradeneeded- 在verionchange提供给您的事务期间,您从旧版本迁移数据和模式。
var rq = indexedDB.open(name, 2);
rq.onupgradeneeded = function(e) {
var db = rq.result;
if (e.oldVersion < 1) {
// database didn't exist at all, create new schema
db.createObjectStore('store2');
} else if (e.oldVersion < 2) {
// do the migration - assumes v1 had 'store1'
var store1 = rq.transaction.objectStore('store1');
var store2 = db.createObjectStore('store2');
var r = store1.openCursor();
r.onsuccess = function() {
var cursor = r.result;
if (cursor) {
store2.put(cursor.value, cursor.key);
cursor.continue();
} else {
// migration done, delete old store
db.deleteObjectStore('store1');
}
};
}
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
568 次 |
| 最近记录: |