概述IndexedDB 写入在并发下易冲突。本文提供串行化、写队列与重试封装思路,提升稳定性。串行与重试const queue = []; function enqueue(fn) { queue.push(fn); if (queue.length === 1) run(); } async function run() { while (queue.length) { const fn = queue[0]; try { await fn(); } finally { queue.shift(); } } } function openDB(name) { return new Promise((resolve, reject) => { const r = indexedDB.open(name, 1); r.onupgradeneeded = () => { const db = r.result; if (!db.objectStoreNames.contains('items')) db.createObjectStore('items',{ keyPath:'id' }); }; r.onsuccess = () => resolve(r.result); r.onerror = () => reject(r.error); }); } function putRecord(rec) { enqueue(async () => { const db = await openDB('con'); const tx = db.transaction('items','readwrite'); tx.objectStore('items').put(rec); await new Promise((res, rej) => { tx.oncomplete = res; tx.onerror = () => rej(tx.error); }); db.close(); }); }

发表评论 取消回复