I'm making an android application using phonegap. I'm using phonegap's Storage api for querying a database. here's my code:
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);
}
The problem is I want to wait till the callback method querySuccess finishes execution before returning from the directPath method.
Don't try to fight the asynchrony: Your app might end up seeming unresponsive to the user. Use the querySuccess callback for any code that has to be executed afterwards.
I wrote a function to solve a similar problem, you can call it like this:
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 );
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With