我有一个IndexedDB,包含页面上各种元素的属性。我在其中一个属性上有一个索引,我使用一个键范围来获得一个特定的结果列表。
var key = IDBKeyRange.bound(10, 20);
var cursor = store.index('property').openCursor(key);
我遇到的问题是cursor.onsuccess
功能。它似乎对结果集中的每个结果执行。因此,一旦解析了所有结果,我就无法执行回调函数。
cursor.onsuccess = function (e) {
var cursor = e.target.result;
if (cursor) {
if (cursor.value.prop1 > 30 && cursor.value.prop2 < 80) {
// Do stuff with result
someArray.push({
prop1: cursor.value.prop1,
prop2: cursor.value.prop2
}):
}
}
cursor.continue();
};
答案 0 :(得分:1)
事实证明,cursor.onsuccess
最后一次以e.target.result
未定义的方式触发。发生这种情况时,您可以执行回调函数:
cursor.onsuccess = function (e) {
var cursor = e.target.result;
if (cursor) {
if (cursor.value.prop1 > 30 && cursor.value.prop2 < 80) {
// Do stuff with result
someArray.push({
prop1: cursor.value.prop1,
prop2: cursor.value.prop2
}):
}
} else {
// Execute code here
console.log('There are ' + someArray.length + ' elements in someArray.');
}
cursor.continue();
};
答案 1 :(得分:1)
知道您的操作已完成的最安全方法是在完成事件上使用事务。光标关闭后会触发此事件。
transaction.oncomplete = function (event) {
console.log('transaction completed');
};
另外,为确保没有发生错误,请在错误和中止时向事务事件添加事件侦听器。
transaction.onerror = function (event) {
console.log('transaction error');
};
transaction.onabort = function (event) {
console.log('transaction abort');
};