2013-02-01 53 views
0

我正在使用PhoneGap和SQLite數據庫。帶有PhoneGap和JavaScript的SQlite數據庫

我嘗試這樣:

我有一個函數useSavedThing():

function useSavedThing() { 

     alert("BEFORE getSavedThing()");  

    getSavedThing(); 

     alert("AFTER getSavedThing()"); 

} 

和功能getSavedThing():

function getSavedThing(){ 

     alert("ONE"); 
     var db = window.openDatabase("Database", "1.0", "Database", 200000); 
    db.transaction(populateDB, errorCB, successCB); 
     alert("TWO"); 
    function populateDB(tx) { 

     alert("THREE"); 
    } 

    function errorCB(tx, err) { 
     alert("Error processing SQL: " + err); 
    } 

    function successCB() { 
     alert("FOUR"); 
     db.transaction(getData); 
    } 

    function getData(tx) { 
       alert("FIVE"); 
     tx.executeSql('SELECT * FROM SETTINGS', [], getIt, errorCB); 
    } 
    function getIt(tx, results) { 
        alert("SIX"); 
      var savedthing = results.rows.item(0).data; 


    } 



} 

的問題是,當函數getSavedThing()被調用時,只發出前兩個警報(警報(「ONE」),警報(「TWO)」),然後調用警報(「AFTER getSavedThing()」)。

但我希望所有發出警報(「ONE」),警報(「TWO」),警報(「THREE」)警報(「FOUR」)警報(「FIVE」),警報(「SIX」)在警報之前(「AFTER getSavedThing()」); appers。

FO警報的順序應爲:

  1. 警報( 「BEFORE getSavedThing()」);
  2. alert(「ONE」);
  3. alert(「TWO」);
  4. alert(「THREE」);
  5. alert(「FOUR」);
  6. alert(「FIVE」);
  7. alert(「SIX」);
  8. alert(「BEFORE getSavedThing()」);

有人可以幫助我嗎?

+0

你能告訴我們在Firebug或類似的任何輸出?我假設getSavedThing()中的函數應該在它之外。 – dan

回答

1

數據庫操作是異步執行的。如果您想在最後一次數據庫操作後執行alert("AFTER getSavedThing()"),則需要從回調函數getIt()中調用它;

function useSavedThing() { 
    alert("BEFORE getSavedThing()"); 
    var afterGet = function(){ 
     alert("AFTER getSavedThing()"); 
    } 
    getSavedThing(afterGet); /*pass the callback function to getSavedThing*/ 
} 

function getSavedThing(callback){ 

    alert("ONE"); 
    var db = window.openDatabase("Database", "1.0", "Database", 200000); 
    db.transaction(populateDB, errorCB, successCB); 
    alert("TWO"); 
    function populateDB(tx) { 
     alert("THREE"); 
    } 

    function errorCB(tx, err) { 
     alert("Error processing SQL: " + err); 
    } 

    function successCB() { 
     alert("FOUR"); 
     db.transaction(getData); 
    } 

    function getData(tx) { 
     alert("FIVE"); 
     tx.executeSql('SELECT * FROM SETTINGS', [], getIt, errorCB); 
    } 

    function getIt(tx, results) { 
     alert("SIX"); 
     var savedthing = results.rows.item(0).data; 
     callback.call(); /*execute the callback function*/ 
    } 
} 
+0

這就是它!這就是爲什麼你使用stackoverflow :-)喜歡它!非常感謝! – PMe

0

可以使用this framework在PhoneGap的數據訪問,你會發現它很容易使用:

var db = new MyDB(); 
//query all users 
var users = db.Users.toArrary(callback); 
相關問題