I wrote the following function to check if my HTML5 openDatabase table is filled or empty:
var that = this;
that.db = openDatabase('dbname', '1.0', "description", 1024 * 1024);
that.tableFilled = function( tableName ) {
that.db.transaction(function ( tx ) {
tx.executeSql('SELECT * FROM ' + tableName, [],
function success( c, results ) {
return ( results.rows.length > 0 ? true : false );
},
function fail() {
console.log('FAiL');
}
);
});
};
I am trying to return the true or false values to tableFilled().
Actually that.tableFilled('tableName') returns undefined.
What I am trying to achieve at the end is:
if ( that.tableFilled('tableName') ){
// ...
}
Is there a way I can return the true or false values to the parent function tableFilled() without using a callback ?
You’re dealing with an asynchronous process so you can’t return a value directly.
What you can do however is return a promise. Your function will promise to give you that value when it’s available. To get the value out of the promise, you have to add a callback function.
You still need to use a callback function but you don’t need to nest your functions anymore, you can just serialize them.
This may be way out of scope for your current needs but it’s a very interesting concept. Just Google for it if you want to know more.
Here is a short example: