2012-05-04 39 views
5

Budujemy aplikację, która szeroko wykorzystuje IndexedDB w Firefoksie do przechowywania danych offline.Błąd "Operacja nie powiodła się, ponieważ żądany obiekt bazy danych nie mógł zostać znaleziony ..." podczas korzystania z indeksowanego DB

To działa dobrze przez większość czasu, ale czasami nie z błędami, jak następuje:

Exception... "The operation failed because the requested database object could 
not be found. For example, an object store did not exist but was being opened." 
code: "3" nsresult: "0x80660003 (NS_ERROR_DOM_INDEXEDDB_NOT_FOUND_ERR)" 

Wydaje się niepowodzeniem w różnych miejscach w kodzie; tutaj jest jednym z winowajców:

_writePage: (storeName, startIndex, endIndex, binder) -> 
    writeTransaction = @connection.transaction([storeName], @idbTransaction.READ_WRITE) 
    store = writeTransaction.objectStore(storeName) 
    for index in [startIndex...endIndex] when (item = binder.list[index])? 
    writeRequest = store.put(item) 
    writeRequest.onerror = binder.failCallback() 
    writeRequest.onsuccess = binder.successCallback() 
    if endIndex >= binder.list.length 
    binder.finishedRegisteringCallbacks() 
    return 
    setTimeout((=> @_writePage(storeName, endIndex, endIndex + @WRITE_EACH_PAGE_SIZE, binder)), @WRITE_EACH_PAGE_DELAY) 
    null 

Rzecz, która mnie zastanawia to, że awarie występują rzadko, podczas zautomatyzowanych testów, które zwykle pracują (widzimy jedną z tych niepowodzeń za setki egzekucji).

Warto wspomnieć, że przechowujemy również wiele danych, rzędu setek megabajtów. Okazuje się, że testy automatyczne przechowują tylko kilka megabajtów, więc nie jest to kwestia wielkości.

Czy ktoś jeszcze (lub lepiej, doświadczony i naprawiony) napotkał ten problem?

Odpowiedz

0

Sprawdź, czy masz wiele otwartych kart, gdy tak się stanie. Jeśli jeden z nich jest w setVersion (stary interfejs API) lub onupgradedneeded (nowy interfejs API), prawdopodobnie spowoduje to problemy w drugim.

Aby debugować, upewnij się, że szukasz zdarzeń onblocked (w porównaniu z onerror) podczas otwierania bazy danych.

+0

Dzięki - ale to działo się w prod tylko jednej karcie w jednej instancji przeglądarki. –

Powiązane problemy