4

我正在使用phonegap制作一个android应用程序。我正在使用 phonegap 的 Storage api 来查询数据库。这是我的代码:

function directPath(src, dest)
{
    var db = window.openDatabase("Database", "1.0", "PhoneGap Demo", 200000);
    db.transaction(queryDB, errorCB);
    return arrayroute;
}

function queryDB(tx)
{
    tx.executeSql(query, [], querySuccess, errorCB);
}

function querySuccess(tx,results) {
    //Write some code here.
}

function errorCB(err) {
    alert("Error in SQL: " + err);
}

问题是我想等到回调方法 querySuccess 完成执行后再从 directPath 方法返回。

4

3 回答 3

6

不要试图与异步作斗争:您的应用程序可能最终看起来对用户没有响应。对之后必须执行的任何代码使用 querySuccess 回调。

于 2012-04-08T12:18:03.663 回答
3

我写了一个函数来解决类似的问题,你可以这样调用它:

database("SELECT * FROM USER", function(result){
    console.log(result);
});

//FUNCTION
function database(sql, callback) {

    if(!callback) { callback = function(r) { console.log(r); } }

    var database_name = "Database",
        database_version = "1.0",
        database_displayname = "DatabaseName",
        database_size = 1000000,
        result = {
            error: -1,
            message: "",
            len: 0,
            rows: {}
        },
        db = window.openDatabase(database_name, database_version, database_displayname, database_size);
        db.transaction(
                        function (tx) {
                            tx.executeSql(sql, [], querySuccess, errorCB);
                        }, function (tx, results) {
                            //SUCCESS
                        }, function (err) {
                            //ERROR
                        }
        );
        function querySuccess(tx, results) {
            if (results) {
                result.len = results.rows.length;
                result.message = "Success";
                for (var i=0; i<result.len; i++){
                    result.rows[i] = results.rows.item(i);
                }
            } else {
                result.len = 0;   
            }
            callback( result );
        }
        function errorCB(err) {
            result.error = err.code;
            result.message = err.message;
            callback( result );
        }
}
于 2014-11-19T13:42:46.200 回答
0

您不必等待...只需在 querySuccess 中编写您的代码以在之后执行它...。

于 2012-04-08T13:48:52.403 回答