Подсчет записей в хранилище объектов в indexedDB не работает в Firefox - PullRequest
0 голосов
/ 13 февраля 2019

Я работал над проектом, основанным на IndexedDB, и заметил, что метод count () не работает должным образом в Firefox.Я не знаю, пропускаю ли я какую-либо концепцию, так как я новичок в этом, но я протестировал ее на Chrome и Opera, и она отлично работает.

Упрощенная версия кода:

var database;
var openDB = indexedDB.open("newDB", 1);

openDB.onupgradeneeded = function () {
    database = openDB.result;
    var newStore = database.createObjectStore("example", { keyPath: "id", autoIncrement: true });
    newStore.createIndex("name", "name", { unique: false });
}
openDB.onsuccess = function () {
    database = openDB.result;
    var tx = database.transaction("example", "readwrite");
    var store = tx.objectStore("example");
    store.put({ name: "el_1" });
    store.put({ name: "el_2" });
    store.put({ name: "el_3" });
    store.put({ name: "el_4" });
    store.put({ name: "el_5" });        

    var transaction = database.transaction(['example'], 'readonly');
    var objectStore = transaction.objectStore('example');
    var counter = objectStore.index('name').count();
    counter.onsuccess = function () {
        total = counter.result;
        console.log(total);
    }
}

Все работает нормально, кроме свойства result в методе count (), который возвращает 0 вместо 5. База данных создана, а объекты сохранены в objectStore.

1 Ответ

0 голосов
/ 13 февраля 2019

Я обнаружил проблему.Когда я переписал код, чтобы опубликовать его здесь, я сначала изменил некоторые вещи, чтобы его было легче понять.Проблема заключалась в том, что мой код был:

   var createStore = database.createObjectStore("example", { keyPath: "id", autoIncrement: true });
    createStore.createIndex("id", "id", { unique: true});
    createStore.createIndex("name", "name", { unique: false });

А потом:

    var counter = objectStore.index('id').count();

Я думаю, что Chrome и Opera с этим согласны, но Firefox этого не позволяет.^^

...