IndexedDB: необработанное (в обещании) исключение DOME - PullRequest
3 голосов
/ 21 июня 2019

Я использую indexedDB (через упаковщик idb от npm) для хранения 2D массивов Float32, которые представляют данные аудиоканала. Некоторое время он работает нормально, однако, когда длина одного из массивов достигает приблизительно 16658432, происходит сбой idb с исключением в заголовке. Трассировка стека довольно бесполезна, так как я использую React вместе с Next.js, однако из того, что я понял, похоже, что он выходит из строя в части кэширования idb. Примечание: я могу хранить несколько больших массивов без проблем, но все ломается, когда любой из них превышает этот "предел"

Это ограничение, с которым мне просто приходится иметь дело, или это можно как-то обойти? Я мог бы потенциально разделить 2D-массив на два массива и сохранить их как отдельные записи, но это далеко не идеальное решение, которое вызовет ту же проблему, когда они тоже вырастут.

Просто простая оболочка для транзакций idb:

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);
  }
};
...