2012-05-04 17 views
5

Chúng tôi đang xây dựng một ứng dụng sử dụng rộng rãi IndexedDB trên Firefox để lưu trữ dữ liệu ngoại tuyến.Lỗi "Thao tác không thành công vì không thể tìm thấy đối tượng cơ sở dữ liệu được yêu cầu ..." khi sử dụng indexedDB

này hoạt động tốt hầu hết thời gian nhưng đôi khi không thành công với các lỗi như sau:

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)" 

Có vẻ như thất bại ở những nơi khác nhau trong các mã; đây là một trong những thủ phạm:

_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 

Điều mà tôi bối rối là những thất bại xảy ra thường xuyên, trong kiểm tra tự động mà thường làm việc (chúng ta đang thấy một trong những thất bại mỗi hàng trăm hành).

Điều đáng nói là chúng tôi cũng lưu trữ nhiều dữ liệu, theo thứ tự hàng trăm megabyte. Tắt các kiểm tra tự động chỉ lưu trữ vài megabyte, vì vậy nó không phải là vấn đề về kích thước.

Có ai khác có kinh nghiệm (hoặc tốt hơn, kinh nghiệm và cố định!) Vấn đề này?

Trả lời

1

Điều này có vẻ là lỗi của Firefox. Tôi đã nêu ra Bug 751802 - Intermittent IndexedDB write failures và các đồng nghiệp của tôi và tôi đang bận làm việc với những người dùng Firefox để giúp tái tạo nó.

Hiện tại không có cách giải quyết hoặc khắc phục.

0

Kiểm tra xem bạn có mở nhiều tab khi điều này xảy ra hay không. Nếu một trong số đó nằm trong số setVersion (API cũ) hoặc onupgradedneeded (API mới), điều này có thể sẽ gây ra sự cố trong trường hợp khác.

Để gỡ lỗi, hãy đảm bảo bạn đang tìm kiếm sự kiện onblocked (so với onerror) khi mở DB.

+0

Cảm ơn - nhưng nó đã xảy ra trong sản với chỉ một tab duy nhất trong một phiên bản trình duyệt duy nhất. –

Các vấn đề liên quan