You are not returning the result of any async action, instead you are listening to it.
returnData , , . .
function getData(callback){
db.transaction(function(tx){
tx.executeSql('SELECT * from q', [], function(tx, result){
var q = [];
for (var i=0; i < result.rows.length; i++) {
q.push(result.rows.item(i));
};
console.log(q.length);
callback(q);
});
});
}
var q;
getData(function(data) {
console.log(data.length);
console.log(data);
doStuffWith(data);
q = data;
});