I am using following code to fetch hierarchical data from Web SQL Database:
...
function getResult(query, data, callback){
db.transaction(function(tx) {
tx.executeSql(query, data, function(tx, result) {
callback(result);
});
});
}
function findChildren(id){
getResult("SELECT * FROM my_table WHERE parent_id=?", [id], function(result){
for (var i = 0, item = null; i < result.rows.length; i++) {
item = result.rows.item(i);
data.push(item);
findChildren(item.id);
}
});
}
var data = Array();
getResult("SELECT * FROM my_table WHERE name like ?", ["A"], function(result){
for (var i = 0, item = null; i < result.rows.length; i++) {
item = result.rows.item(i);
data.push(item);
findChildren(item.id);
}
});
...
How can I detect if the execution has been completed?
Use a callback for
findChildren
and a counter for open transactions:Promises will abstract the counter and simplify the callback handling. Also, as your two queries are very similiar, you might want to abstract them in a common function, too.