gpt4 book ai didi

javascript - 使用 Dexie 的本地存储不持久

转载 作者:行者123 更新时间:2023-12-05 00:29:49 24 4
gpt4 key购买 nike

我正在使用 Dexie 访问闪存卡制造商项目中的 IndexedDB。我可以按预期操作数据库,如果我关闭并重新打开浏览器,它会保留在数据库中,但通常当我几天不处理项目后打开项目时,我放入数据库中的存储数据是' t在那里了。
我做了一些研究,发现我需要使数据库持久化,但我不知道该怎么做。
我几乎从 Dexie Storage Manager page 复制了推荐的代码进入主页面 index.js 的 onLoad 函数。以下是相关代码:

//When the page loads, display the decks in ul on the webpage.
window.addEventListener('load', onLoad);
async function onLoad() {

//Check how much data is available.
showEstimatedQuota();

//Make sure the storage is persistent.
isStoragePersisted().then(async isPersisted => {
if (isPersisted) {
console.log(":) Storage is successfully persisted.");
} else {
console.log(":( Storage is not persisted.");
console.log("Trying to persist..:");
if (await persist()) {
console.log(":) We successfully turned the storage to be persisted.");
} else {
console.log(":( Failed to make storage persisted");
}
}
});
}
上面的 onLoad 函数引用了我保存在 dexie-setup.js 上的三个函数:
//This function makes the storage persistent.
//(Copied from https://dexie.org/docs/StorageManager)
async function persist() {
return await navigator.storage && navigator.storage.persist &&
navigator.storage.persist();
}


//This function checks if the storage is persistent.
//(Copied from https://dexie.org/docs/StorageManager)
async function isStoragePersisted() {
return await navigator.storage && navigator.storage.persisted &&
navigator.storage.persisted();
}


//This function logs to console how much data is available.
//(Copied from https://dexie.org/docs/StorageManager)
async function showEstimatedQuota() {
if (navigator.storage && navigator.storage.estimate) {
const estimation = await navigator.storage.estimate();
console.log(`Quota: ${estimation.quota}`);
console.log(`Usage: ${estimation.usage}`);
} else {
console.error("StorageManager not found");
}
}
我的控制台日志:
  • dexie-setup.js:56 配额:6358499328
  • dexie-setup.js:57 用法:25370
  • index.js:30 :( 存储未持久化。
  • index.js:31 试图
    坚持..:
  • dexie-setup.js:84 完成检查 dexie。
  • index.js:33 :) 我们成功地将存储转换为持久化。

  • 但是,如果我刷新页面,我会在控制台上记录相同的内容:数据库仍设置为非持久性。
    showEstimatedQuota 函数检查数据存储并确认 DataStorage API 正在运行,所以我认为这不是问题所在。 (我只存储带有文本的小对象,所以无论如何我不希望超过存储限制。)
    到目前为止,该项目在我的 chromebook 上完全是本地的,我正在 Chrome 浏览器上查看它。
    请让我知道如何使我的数据库持久化。我对此很陌生(这是我关于stackoverflow的第一个问题!),所以希望这是一个容易解决的问题!提前致谢。

    最佳答案

    引用 Dexie 的文档:“尽管 IndexedDB 是一个功能齐全的 Web 客户端数据库,但默认情况下它不是持久存储。没有 StorageManager 的 IndexedDB 只是一个“尽力而为”的数据库,可以在以下情况下被删除"
    因此,您不能使数据库持久化。只需“尽力而为”。
    此链接可能会有所帮助:

  • https://web.dev/persistent-storage/
  • Chrome.Storage.Local Persistence

  • 我希望它会对你有所帮助。

    关于javascript - 使用 Dexie 的本地存储不持久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64616464/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com