我正在使用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方法返回之前完成执行。
答案 0 :(得分:6)
不要试图对抗异步:您的应用可能最终似乎对用户没有反应。对于之后必须执行的任何代码,请使用querySuccess回调。
答案 1 :(得分: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 );
}
}
答案 2 :(得分:0)
您不必等待......只需在querySuccess中编写代码,然后再执行....