Вы не возвращаете результат какого-либо асинхронного действия, вместо этого вы слушаете его.
В вашем коде 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); // 3
callback(q);
});
});
}
var q;
getData(function(data) {
console.log(data.length); // 3
console.log(data);
doStuffWith(data);
q = data;
});