Estoy creando una aplicación que hace un uso intensivo de indexedDB. Estoy usando la estructura del código de la siguiente manera:
Clase base:
class BaseDB { constructor(options) { this.version = options.version; this.dbName = options.dbName; } async open() { return new Promise((resolve, reject) => { let req = indexedDB.open(this.dbName, this.version); req.onsuccess = (e) => { Log(TAG, "open.onsuccess"); this.db = req.result resolve(0) }; req.onerror = (e) => { Log(TAG, "open.onerror"); reject(e.target.errorCode); }; req.onupgradeneeded = (evt) => { this.onUpgrade(evt); }; }) } //other common methods below .. }
Otras clases heredan de la clase base:
class ConnectionDB extends BaseDB { constructor(options) { options.dbName = DB_NAME; super(options); this.store = "connections"; } onUpgrade(e) { Log(TAG, "open.onupgradeneeded"); var store = e.currentTarget.result.createObjectStore( this.store, { keyPath: 'id', autoIncrement: true }); store.createIndex(CONNECTION_INDEX, ["name"], { unique: true }); } //other methods below .. }
Hago uso de las clases de la siguiente manera:
async init() { this.connectionDb = new ConnectionDB({version: 1}); await this.connectionDb.open(); }
La versión está codificada en este momento y no la he cambiado desde el principio.
Todo funciona perfectamente. Pero de vez en cuando encuentro que todos mis datos de indexedDB se eliminan. Esto sucede solo en Chrome y (al menos hasta ahora) no en otros navegadores. Me di cuenta de que Chrome recientemente comenzó a pedirme que creara un "perfil". Sospecho que este problema de indexedDB comenzó a ocurrir casi al mismo tiempo, pero no estoy del todo seguro. Quiero saber si estoy haciendo algo mal en mi código, lo que puede causar que se elimine la base de datos en algunos casos, o ¿tiene algo que ver con Chrome?