0

ページ上のさまざまな要素のプロパティを含む IndexedDB があります。これらのプロパティの 1 つにインデックスがあり、キー範囲を使用して特定の結果リストを取得しています。

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();
};
4

2 に答える 2

1

結局のところ、 undefinedcursor.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();
};
于 2012-10-17T20:40:58.013 に答える
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');
};
于 2012-10-18T13:43:22.687 に答える