计算indexedDB中对象存储中的记录在Firefox中不起作用

时间:2019-02-13 03:07:54

标签: javascript indexeddb

我一直在研究基于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);
    }
}

一切正常,除了方法count()的属性结果返回0而不是5之外,其他所有都正常。数据库已创建,并且对象存储在objectStore中。

1 个答案:

答案 0 :(得分:1)

我发现了问题所在。当我重写代码以将其发布到此处时,我首先进行了一些更改以使其更易于理解。问题是我的代码曾经是:

   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不允许。 ^^