Bre*_*ent 9 javascript indexeddb
我想基本计算indexedDB数据库中的记录数.
目前我的代码看起来像
使用Javascript
var transaction = db.transaction(["data"], "readonly");
var objectStore = transaction.objectStore("data");
var cursor = objectStore.openCursor();
var count = objectStore.count();
console.log(count);
Run Code Online (Sandbox Code Playgroud)
我希望这能说输出只有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
Run Code Online (Sandbox Code Playgroud)
这是正确的,但我只是想说它不是其他东西.
小智 13
使用少量代码恢复记录计数:
var store = db.transaction(['trans']).objectStore('trans');
var count = store.count();
count.onsuccess = function() {
console.log(count.result);
}
Run Code Online (Sandbox Code Playgroud)
尝试这样的事情:
var transaction = db.transaction(["data"], "readonly");
var objectStore = transaction.objectStore("data");
var count = objectStore.count();
count.onsuccess = function() {
console.log(count.result);
};
Run Code Online (Sandbox Code Playgroud)
按顺序稍微介绍一下。来自我的个人交易文档:
某些事务从数据库返回数据或“结果”。这些事务称为“请求”,除了打开数据库之外,值始终是对象“键”和“值”以及 IDBRequest 实例的各种组合。请求事务就是:“事务请求”,即请求某些东西而不是获取它的行为。程序员在处理 IDBObjectStore、IDBIndex 或 IDBCursor 对象时会遇到它们。
你看到的是一个IDBRequest对象,它是由count()方法返回的。这代表对数据的请求,而不是数据本身。
数据本身在事件触发后可用complete,并且可以通过属性访问IDBRequest.result。
这是我的库中经过测试的计数方法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);
});
Run Code Online (Sandbox Code Playgroud)
我会注意到我可能应该使用该complete事件而不是该success事件。我无法解释为什么,但有时结果值在success回调中不可用。
| 归档时间: |
|
| 查看次数: |
7370 次 |
| 最近记录: |