我想基本计算indexedDB数据库中的记录数。
目前我的代码看起来像
的Javascript
var transaction = db.transaction(["data"], "readonly");
var objectStore = transaction.objectStore("data");
var cursor = objectStore.openCursor();
var count = objectStore.count();
console.log(count);
我很乐意这样说输出只有3,但我得到了。
输出
IDBRequest {onerror: null, onsuccess: null, readyState: "pending", transaction: IDBTransaction, source: IDBObjectStore…}
error: null
onerror: null
onsuccess: null
readyState: "done"
result: 3
source: IDBObjectStore
transaction: IDBTransaction
__proto__: IDBRequest
哪个是正确的,但我只是想说它不会加载其他东西。
答案 0 :(得分:13)
使用少量代码恢复记录计数:
var store = db.transaction(['trans']).objectStore('trans');
var count = store.count();
count.onsuccess = function() {
console.log(count.result);
}
答案 1 :(得分:6)
尝试这样的事情:
var transaction = db.transaction(["data"], "readonly");
var objectStore = transaction.objectStore("data");
var count = objectStore.count();
count.onsuccess = function() {
console.log(count.result);
};
答案 2 :(得分:3)
按顺序介绍一点点。来自我的personal docs交易:
某些交易从数据库返回数据或“#34;结果"”。 这些交易被称为"请求"除了 数据库打开时,值始终是对象的各种组合 "键"和"价值观"和IDBRequest的实例。请求交易 只是:一个交易请求,"即要求的行为 而不是获得它。程序员遇到他们 处理IDBObjectStore,IDBIndex或IDBCursor对象时。
您正在查看的是IDBRequest
对象,该对象由count()
方法返回。这表示对数据的请求,而不是数据本身。
数据本身在complete
事件触发后可用,可以通过IDBRequest.result
属性访问。
这是来自my library, dash的测试计数方法:
API.entries.count = function (count_ctx) {
var request;
if (API.exists(count_ctx.index)) {
count_ctx.idx = count_ctx.objectstore.index(count_ctx.index);
request = API.isEmpty(count_ctx.key) ? count_ctx.idx.count() : count_ctx.idx.count(count_ctx.key);
} else {
request = API.isEmpty(count_ctx.key) ? count_ctx.objectstore.count() : count_ctx.objectstore.count(count_ctx.key);
}
count_ctx.transaction.addEventListener('error', function (event) {
count_ctx.error = event.target.error.message;
API.error(count_ctx);
});
request.addEventListener('success', function () {
count_ctx.total = request.result;
API.success(count_ctx);
});
我注意到我可能应该使用complete
事件而不是success
事件。我无法解释原因,但有时结果值在success
回调中不可用。