1

次のコードを使用して、インデックス付きDBからデータを読み取り、変数allDownloadContentに保存しています。

ereaderdownload.indexedDB.getAllTodoItems = function() {

    /*var todos = document.getElementById("todoItems");
    todos.innerHTML = "";
  */
    var db = ereaderdownload.indexedDB.db;
    var trans = db.transaction(["downloadcontent"], "readwrite");
    var store = trans.objectStore("downloadcontent");
    var request = store.get(0);

    request.onsuccess = function(e) {
        console.log(e.target.result);
    };

    // Get everything in the store;
    var cursorRequest = store.openCursor();
    cursorRequest.onsuccess = function(e) {
        var result = e.target.result;
        if(!!result == false)
            return;
        allDownloadContent.push(result);
        result.continue();
    };
    alert("content "+allDownloadContent[0]);
    cursorRequest.onerror = ereaderdownload.indexedDB.onerror;
  };

別のJavascriptファイルからgetAllTodoItemsメソッドを呼び出すと、未定義のアラートメッセージコンテンツが表示されます

cursorRequest.onsuccessメソッドが非同期を実行するため、未定義になります。

Chromeでサポートされていないため、Webワーカーを使用できません。

Jqueryでpromiseを試しました。それでも同じアラートメッセージが表示されます。

問題の解決にご協力ください。

4

1 に答える 1

3

現在のところ、すべてのブラウザはIndexed-db ASync APIのみをサポートしており、必要なのはトランザクションoncompleteイベントにイベントリスナーを追加することです。このイベントは、カーソルが閉じられたときに発生します。そこからコードに戻ることができます。

trans.oncomplete = function (event) {
    console.log('transaction completed');
    yourFunction();
};
于 2012-12-26T14:52:08.590 に答える