概述跨库迁移常伴随字段重命名与结构调整。本文给出标准迁移流程。迁移脚本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 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部
2.035614s