0

我正在使用 PhoneGap 和 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() 被调用时,只有前两个警报 (alert("ONE"), alert("TWO)) 发出但随后警报 ("AFTER getSavedThing ()") 被调用。

但是我希望所有费用警报(“ONE”),警报(“TWO”),警报(“THREE”)警报(“FOUR”)警报(“FIVE”),警报(“SIX”),在警报之前发出("在 getSavedThing() 之后"); 出现。

警报的顺序应该是:

  1. alert("在 getSavedThing() 之前");
  2. 警报(“一个”);
  3. 警报(“两个”);
  4. 警报(“三个”);
  5. 警报(“四”);
  6. 警报(“五”);
  7. 警报(“六”);
  8. alert("在 getSavedThing() 之前");

有人能帮我吗?

4

2 回答 2

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*/
    }
}
于 2013-02-01T12:12:10.153 回答
0

你可以在PhoneGap中使用这个框架进行数据访问,你会发现它非常好用:

var db = new MyDB();
//query all users
var users = db.Users.toArrary(callback);
于 2013-02-02T14:51:12.253 回答