Dexie.js 使用 .equals 的查询不适用于 localStorage

Dexie.js query with .equals not working with localStorage

我正在尝试使用 Dexie.js 从 indexedDB 获取值,但它无法识别 localStorage 的值。

我尝试了 async/await,promises,将 localstorage 调用放置在创建的、安装的、外部导出默认值上,并且 none 这些方法奏效了。

fetchData() {
  return dbDexie.tactics1
    .where('i')
    .equals(localStorage.getItem("id")) // Here is the problem
    .toArray()
    .then((r) => r[0].f);
}

.equals严格相等

equals方法是严格的相等性测试,所以如果idindexedDB中的数字类型,那么localStorage返回的字符串类型不会匹配,因为类型不同。而 localStorage 只存储字符串。

因此,在从 localStorage 中检索数据时,通常会看到 JSON.parse 用于转换序列化数据:

fetchData() {
  return dbDexie.tactics1
    .where('i')
    .equals(JSON.parse(localStorage.getItem("id")))
    .toArray()
    .then((r) => r[0].f);
},

或者您可以更明确地将 localStorage 值转换为数字类型:

.equals(Number(localStorage.getItem("id")))