【问题标题】: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严格相等

    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 值转换为 Number 类型:

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

    【讨论】:

      猜你喜欢
      • 2017-10-30
      • 2018-03-11
      • 1970-01-01
      • 1970-01-01
      • 2021-01-14
      • 2018-03-16
      • 2016-01-25
      • 2020-04-19
      • 1970-01-01
      相关资源
      最近更新 更多