概述跨库迁移常伴随字段重命名与结构调整。本文给出标准迁移流程。迁移脚本function openDB(name, version, upgrade) { return new Promise((resolve, reject) => { const r = indexedDB.open(name, version); r.onupgradeneeded = e => upgrade && upgrade(r.result, e.oldVersion, e.newVersion); r.onsuccess = () => resolve(r.result); r.onerror = () => reject(r.error); }); }

async function migrate(srcName, dstName) {

const src = await openDB(srcName);

const dst = await openDB(dstName, 1, db => { if (!db.objectStoreNames.contains('items')) db.createObjectStore('items', { keyPath: 'id' }); });

const stx = src.transaction(src.objectStoreNames[0], 'readonly');

const s = stx.objectStore(src.objectStoreNames[0]);

const req = s.openCursor();

await new Promise((resolve, reject) => {

req.onsuccess = async e => {

const c = e.target.result;

if (c) {

const v = c.value;

const norm = { id: v.id, name: v.name?.trim() || '', updatedAt: v.updatedAt || Date.now() };

const dtx = dst.transaction('items','readwrite');

dtx.objectStore('items').put(norm);

await new Promise((res, rej) => { dtx.oncomplete = res; dtx.onerror = () => rej(dtx.error); });

c.continue();

} else resolve();

};

req.onerror = () => reject(req.error);

});

src.close(); dst.close();

}

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部