2015-04-22 4 views
2

Когда я вставляю в свою базу данных, он дважды вставляет те же данные.Вставка дублирующегося значения в indexeddb

Таблица Создание

var oOptions = { 
    keyPath: account.primaryKey, 
    autoIncrement: true 
}; 
var oStore = dbHandle.createObjectStore(account.tableName, oOptions); 

var oIxOptions = { 
    unique: false 
}; 
account.fields.forEach(function(item) { 
    oStore.createIndex(item + "Index", item, oIxOptions); 
}); 

Вставка

var defered = $q.defer(); 
try { 
    var objectStore = config.database.transaction(tableName, "readwrite").objectStore(tableName); 
    var result = objectStore.add(entity); 
    result.onerror = function(e) { 
     defered.reject("Can't insert into account"); 
     throw e; 
    } 
    result.onsuccess = function(e) { 
     defered.resolve(); 
    } 
} catch (e) { 
    defered.reject("Can't insert into account"); 
    throw e; 
} 
return defered.promise; 

Retrive

var defered = $q.defer(); 
try { 
    var req = $window.indexedDB.open(config.databaseName, 1.0); 
    req.onsuccess = function(evt) { 
     config.database = evt.target.result; 
     var transaction = config.database.transaction(account.tableName, IDBTransaction.READ_ONLY); 
     var objectStore = transaction.objectStore(account.tableName); 
     var tmpData = []; 
     objectStore.openCursor().onsuccess = function(event) { 
      var cursor = event.target.result; 
      if (!cursor) { 
       defered.resolve(tmpData); 
       return; 
      } 
      tmpData.push(cursor.value); 
      cursor.continue(); 
     }; 
    } 
} catch (e) { 
    defered.reject("Can't pull from account"); 
    throw e; 
} 
return defered.promise; 

Любое предложение ??

+0

Ваш метод вставки вызывается дважды, или он просто вставляется дважды? Что вызывает вызов метода insert? – Tom

+0

это не связано с двойной вставкой, но ... ваши использование блоков try/catch, завернутых в обещания? – tpie

+0

@tpie да, не должен ли я использовать try ctach во время обещания ?? –

ответ

1

Это может быть проблема с indexedDB и проблема с использованием try/catch и обещаний. Испытали ли вы без try/catch и без обещаний? Каково ваше обоснование для использования обещаний здесь? Учтите, что вам не нужна попытка try/catch, и вам не нужны обещания выполнить эти простые задачи.

+0

Я тестировал его на IE .. в IE триггерное событие дважды для ng-click. После фильтрации числа триггеров я решил проблему. –