2013-09-11 2 views
0

Я пытаюсь установить в базу данных 2,5 миллиона случайно сгенерированных людей. В коде я сделал партию из 2.500 пользователей, а затем совершил транзакцию.Индексированная транзакция транзакции по транзакции после обработки ошибки

библиотека chancejs генерирует guid, но не всегда уникальна. Поэтому всякий раз, когда он не уникален, я хочу, чтобы он помещал ошибку в массив и игнорировал .add &, совершить транзакцию в любом случае.

var transaction = db.connection.transaction(["users"], "readwrite"); 
var request = objectStore.add(newuser); 

for (i=0;i<batchsize;i++){ 
    request.onerror = function(event) { 
    event.cancelBubble = true; 
    // Some kind of CONTINUE event here 
    } 
} 

Сделка работает, и я могу заполнить свою базу данных всеми пользователями. , помещая createIndex 'bsn' на уникальном, заставляет его потерпеть неудачу.

var index = objectStore.createIndex("bsn", "bsn", { unique: true }); 
+1

event.cancelBubble устарел и может не работать в будущих браузерах. Вы должны использовать event.preventDefault() или event.stopPropagation() – oligofren

ответ

2

Когда запрос не выполнен, действие по умолчанию для события прерывает его прерывание. Если вы не хотите этого поведения, вызовите event.preventDefault() для обработчика onerror запроса или транзакции.

+0

Я проверю это tommorow, я пробовал надеть его на preventDefault = true, но я не знал, что вы должны вызвать функцию. Спасибо, куча за этот ответ. –

1

Вызов event.preventDefault() предотвратит прерывание транзакции, но событие все равно будет распространяться на обработчик transaction.onerror, что может сбить с толку. Если вы хотите избавиться от этого сообщения, просто позвоните event.stopPropagation(). Более подробную информацию и пример кода можно найти in this answer.

+0

Нет 'event.stopPropagation()' не требуется. Распространение события прекрасное, так что вы можете получить его в обратном вызове 'tx.onerror'. BTW, tx будет продолжать работать даже после вызова 'tx.onerror'. Наконец, предположим, что это событие вызовет обратный вызов 'window.onerror'. –

+0

Отличная информация, @ KyawTun! Я отредактирую свой ответ. – oligofren

+1

ПРИМЕЧАНИЕ: распространение обработчика transaction.onerror не прерывает транзакцию. – jcalfee314

Смежные вопросы