1

我编写了一个对象,让我可以更轻松地使用 Phonegap 的数据库。SELECT 语句的部分如下:

/********************
 * Database SELECT: *
 ********************/
global.select = function(query)
{
    var resultSet = null;

    db.transaction(function(tx){ // Do SQL stuff here:
        tx.executeSql(query, [], function(tx, results){ // Success:
            // When results are there:
            if(results != null)
            {
                // return them for using them:
                resultSet = results;
                alert("Results are here: " + results);
            }
            // In all other cases:
            else
            {
                // Return false (error):
                return false;
            }
        }, function(error){ // Error:
            global.logError(error);
        });
    }, function(error){ // Error:
        global.logError(error);
    }, function(){ // Success:
        consoleLog("SELECT complete!");
        alert("Return would be: " + resultSet);
        return resultSet;
    });
} // <-- global.insert = function(query)

让我头疼的部分尝试使用上面的函数从表中选择所有内容。我遇到的问题是,通过这样做,我得到了超出我能力的异步行为......

这是尝试选择内容的代码:

var results;
if( results = db.select('SELECT * FROM my_table WHERE 1') )
{
    alert("Result in index.html success: " + results);
    // Do stuff with query results here...
}
else
{
    alert("Result in index.html failure: " + results);
}

执行此操作时,

alert("Result in index.html failure: " + results);

是我看到的第一个输出。它似乎在选择甚至开始之前执行。我究竟做错了什么?

另外,我不确定如何从 SELECT 函数返回结果。由于有嵌套函数,我不知道如何优雅地处理它。这部分有什么想法吗?

太感谢了!

4

1 回答 1

2

这些回调异步的;这就是 WebSQL 的设计方式。

db.select在数据可用之前返回;任何访问数据的代码都必须在回调函数executeSqltransaction回调函数中,或者在从那里调用的函数中。

于 2013-07-22T17:23:54.440 回答