IndexedDB:清除并写入单个事务中

问题描述 投票:0回答:1

我从Mozilla dev page中阅读了有关IndexedDB的内容,并找到了有关浏览器意外关闭的这一段。

首先,您应注意始终将数据库保留在每个交易结束时的状态保持一致。例如,假设您正在使用IndexedDB来存储允许的项目列表用户进行编辑。您可以在编辑后通过清除对象存储,然后写出新列表。如果清除对象存储在一个事务中,并在另一个事务中写入新列表交易,浏览器可能会在清除但在写入之前,将留下一个空数据库。至避免这种情况,您应该将清除和写入合并为一个交易。

有人可以解释如何将清除和写入合并为单个事务吗?

indexeddb
1个回答
0
投票

确定

function clearAndPutObject(db, object) {
  return new Promise((resolve, reject) => {
    const transaction = db.transaction('store', 'readwrite');
    const store = db.objectStore('store');
    store.clear();
    store.put(object);
    transaction.onerror = event => reject(event.target.error);
    transaction.onsuccess = resolve;
  });
}

async function foo() {
  const db = await connect();
  await clearAndPutObject(db, myobject);
  db.close();
}
© www.soinside.com 2019 - 2024. All rights reserved.