0

データベースから読み取ったデータを変数に入れようとしています。コールバック関数を含む多くのことを試しましたが、プロセスが「opencursor().onsuccess」関数の範囲外にある場合は何も機能していないようです。

「アラート 1」は結果を正しく表示しますが、「アラート 2」と「アラート 3」は結果を表示しません。

HTML コードから「main()」関数を呼び出しています。

私はインターネットで解決策を探していたので、良い結果が得られなかったので、本当にイライラしています。

誰か助けてくれませんか?

どうもありがとう。

var data=[];

function kkeyget(t1, db_name, db_version)
{
    var request = indexedDB.open(db_name, db_version);
    request.onerror=function()
    {
     alert("Error");
    }    
    request.onsuccess=function(event)
    {
    var db=this.result; 
    var trans = db.transaction(t1, "readonly");
    var objectStore = trans.objectStore(t1);
    objectStore.openCursor().onsuccess = function(event) 
    {
        var cursor = event.target.result;
        if (cursor) 
        {
         data.push(cursor.value);

         //Alert 1:
         alert(data[0].id);

         cursor.continue();
        }
        else alert("No more entries!");
    };
    }

    //Alert 2:
    alert(data[0].id);
} 

function main()
{
kkeyget("agenda", "example_db", 1);

//Alert 3:
alert(data[0].id);
}
4

2 に答える 2

1

キーを返そうとする代わりに、取得したキーを引数として受け取るカスタム コールバック関数を渡します。

// Your old function slightly modified
function kkeyget(t1, db_name, db_version, callback, fallback) {
 // ... yada yada yada
 objectStore.openCursor().onsuccess = function(event) {
   var cursor = event.target.result;
   if(cursor) {
     callback(cursor.value);
   } else {
     fallback();
   }
 }
}


// Now in your calling code:
kkeyget('a','b',1, function(id) {
  // Do something with the 'id'
  // here in this anonymous function callback
}, function() {
  // Do something here to indicate no match
});
于 2013-06-27T01:05:50.607 に答える