Új hozzászólás Aktív témák

  • Jim-Y

    veterán

    válasz tboy93 #6677 üzenetére

    En ezt valahogy igy oldanam meg. Kicsit objektumorientaltabb.

    class DataSourceIndexedDB extends EventEmitter {

    get MESSAGES() {
    return {
    CONNECTION_ERROR: 'error',
    DATABASE_OPENED: 'db-opened'
    }
    }

    constructor(databaseName) {
    this._dbName = databaseName;
    this._database = null;
    }

    openDatabase() {
    const request = indexedDB.open(this._dbName, 1);
    request.onerror = this.onConnectionError.bind(this);
    request.onsuccess = this.onConnectionSuccess.bind(this);
    }

    onConnectionError(event) {
    this.emit(this.MESSAGES.CONNECTION_ERROR, {
    code: event.target.errorCode
    });
    }

    onConnectionSuccess(event) {
    this._database = event.target.result;
    this.emit(this.MESSAGES.DATABASE_OPENED);
    }

    getObjectStore(storeName, mode) {
    const tx = this._database.transaction(storeName, mode);
    return tx.objectStore(storeName);
    }
    }

    const database = 'xyz';
    const table = 'xyz';
    const indexedDB = new DataSourceIndexedDB(database);

    // might be automated in constructor
    indexedDB.openDatabase();

    indexedDB.on(indexedDB.MESSAGES.DATABASE_OPENED, () => {
    const store = indexedDB.getObjectStore(table, 'readwrite');
    const request = store.getAll();

    request.onsuccess = (event) => {
    const data = event.target.result;
    // do smtg with data
    };

    request.onerror = (event) => {
    // error handling
    }
    });

Új hozzászólás Aktív témák