首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IndexedDB:秘密(承诺) DOMException

IndexedDB:秘密(承诺) DOMException
EN

Stack Overflow用户
提问于 2019-06-21 05:30:12
回答 1查看 968关注 0票数 4

我使用indexedDB(通过npm的idb包装)来存储表示音频通道数据的2D Float32数组。但是,当其中一个数组的长度接近16658432时,它在一段时间内会正常工作,而标题中的异常则会导致idb崩溃。堆栈跟踪非常无用,因为我使用的是React和Next.js,但是从我的判断来看,它似乎在idb的缓存部分崩溃了。注意:我可以存储多个大数组没有问题,但是一旦它们中的任何一个超过这个“限制”,一切都会中断。

这是我必须处理的一个限制,还是可以用某种方式解决?我可能会将2D数组分割成两个数组,并将它们作为单独的条目存储,但这不是一个理想的解决方案,一旦它们增长,就会导致同样的问题。

只是idb事务的一个简单包装:

代码语言:javascript
复制
export const asyncPut = async (
  dbName: string,
  tableName: string,
  key: string,
  value: any // [Float32Array, Float32Array]
): Promise<void> => {
  try {
    const db = await asyncOpenDb(dbName, tableName);
    const transaction = db.transaction(tableName, "readwrite");
    await transaction.objectStore(tableName).put(value, key);
  } catch (error) {
    // I catch the error here
    console.error("**IDB Error:", error);
  }
};
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-20 18:01:58

我刚刚在Chrome上测试了这个,他们可能已经改进了你测试后的错误。

当我试图插入这个数组时遇到的错误:

代码语言:javascript
复制
ar = new Array(16658432).fill(1)

是它超过了单个对象的最大大小:

代码语言:javascript
复制
target: IDBRequest
error: DOMException
code: 0
message: "The serialized keys and/or value are too large (size=515354750 bytes, max=133169152 bytes)."
name: "UnknownError"
__proto__: DOMException

在以下方面测试:

  • Google Chrome
  • 版本76.0.3809.100 (正式构建)(64位)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56697359

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档