【问题标题】:Dexie.js query with .equals not working with localStorage使用 .equals 的 Dexie.js 查询不适用于 localStorage
【发布时间】:2021-05-04 20:06:01
【问题描述】:
我正在尝试使用 Dexie.js 从 indexedDB 获取值,但它无法识别来自 localStorage 的值。
我尝试了 async/await、promise、将 localstorage 调用置于已创建、已安装、外部导出默认值上,但这些方法都不起作用。
fetchData() {
return dbDexie.tactics1
.where('i')
.equals(localStorage.getItem("id")) // Here is the problem
.toArray()
.then((r) => r[0].f);
}
【问题讨论】:
标签:
javascript
vue.js
local-storage
indexeddb
dexie
【解决方案1】:
equals 方法是一个严格的相等测试,所以如果id 是indexedDB 中的数字类型,那么从localStorage 返回的字符串类型将不匹配,因为类型不同。而localStorage 只存储字符串。
因此,在从localStorage 检索数据时,通常会看到使用JSON.parse 来转换序列化数据:
fetchData() {
return dbDexie.tactics1
.where('i')
.equals(JSON.parse(localStorage.getItem("id")))
.toArray()
.then((r) => r[0].f);
},
或者您可以更明确地将 localStorage 值转换为 Number 类型:
.equals(Number(localStorage.getItem("id")))