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?
Dzięki - ale to działo się w prod tylko jednej karcie w jednej instancji przeglądarki. –