在“IDBKeyRange”上执行“only”操作失败:参数不是有效键。

9

我正在使用jsstore的where类从indexeddb中提取数据。我已经获得了响应,但是控制台报错显示:“Failed to execute 'only' on 'IDBKeyRange': The parameter is not a valid key.”。为什么会出现这个错误?请问有谁能帮助我解决这个问题。

//Get DBSchema(table & columns)
  private getDbSchema = function () {
    const tblArticle = {
      Name: this._indexedDBLiveDBTableName,
      Columns: [
       {
          Name: 'ParentName',
          NotNull: true,
          DataType: 'string'
        },
        {
          Name: 'ChildName',
          NotNull: true,
          DataType: 'string'
        }
        ,
        {
          Name: 'UpdatedDate',
          NotNull: true,
          DataType: 'string'
        }
      ]
    };

    const Database = {
      Name: this._indexedDBLiveDBName,
      Tables: [tblArticle]
    };
    return Database as any;
  };

 //Fetch articles From IndexedDB
GetArticleFromIndexedDb(section) {
    this._connection.openDb(this._indexedDBLiveDBName);
    return this._connection.select({
      From: this._indexedDBLiveDBTableName,
      Where: {
        ChildName: section
      }
    });
 }

区域值将类似于“印度”,“泰米尔纳德邦”

请查看附加的截图以获取错误信息

在这里

我正在使用 jsstore 1.3.0

我将 jsstore 版本更新为 1.4.1,但出现了“超出最大调用栈大小”的问题

输入图片说明

谢谢


1
你将传递什么数据给 IDBKeyRange.only() 函数?正如错误提示所述,你只能传递有效的 Indexed DB 键值(数字、日期、字符串、二进制数据或其他键值的数组)。 - Joshua Bell
请将您的代码与控制台错误截图一起添加。 - Ujjwal Kumar Gupta
部分的值是多少? - Ujjwal Kumar Gupta
在哪个浏览器上?是发生在这个查询还是其他什么地方? - Ujjwal Kumar Gupta
插入错误已经消失。但是获取错误“在'IDBKeyRange'上执行'only'失败:参数不是有效的键”仍然存在。但我可以获取数据。 - kamalav
显示剩余5条评论
2个回答

15

造成此错误的原因是提供了无效值。 IndexedDB 支持数字、日期、字符串、二进制数据、数组值 - 这些都是有效的键。

通常在传递布尔值、null 或未定义的值时会引发此错误。

查看 w3c 获取更多信息 - https://w3c.github.io/IndexedDB/#key-construct


对于其他人来说 - 是的,你不能查询 null/true/false,你必须先将它们转换为字符串,然后查询。 - jave.web

1

对于其他遇到同样问题但实际传递了有效密钥的人,可能是你正在运行。

objectStore.put(key, value)

何时应该运行

objectStore.put(value, key)

按照规格来看,它是反向的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接