简体   繁体   中英

Return a COUNT from a WebSQL query in a javaScript function

I want to return the number of rows in a particular table in a database in WebSQL inside a javascript function. Below is my code.

function getCustomerCount(){    
    var count = 0;  
    db.transaction(function(tx) {   
    tx.executeSql('SELECT * FROM contacts', [], function(tx, results) {
             count = results.rows.length;   
        });
    });
    return count;
}


I am new to WebSQL and rather unfamiliar with javascript also.
Any suggestions?

You can't do this:

function getCustomerCount(){    
    var count = 0;  
    db.transaction(function(tx) {   
    tx.executeSql('SELECT * FROM contacts', [], function(tx, results) {
             // this function is called when the executeSql is ended
             count = results.rows.length;   
        });
    });
    // This returns always 0!
    return count;
}

You have to use callbacks like so:

function getCustomerCount( callback ){    
    var count = 0;  
    db.transaction(function(tx) {   
    tx.executeSql('SELECT * FROM contacts', [], function(tx, results) {
             // this function is called when the executeSql is ended
             count = results.rows.length;
             callback( count );   // <-- call the callback when is done   
        });
    });
}

And use it like:

getCustomerCount( function( count ) {
    // do what you want with the count
    console.log( 'The number of rows is: '+ count );
});

Another way is to use promises, here is an example with the Jquery deferred object

function getCustomerCount() {
    //setup the deferred object
    var defer = $.Deferred();
    var count = 0;
    db.transaction(function(tx) {
        tx.executeSql('SELECT * FROM contacts', [], function(tx, results) {
            //resolve the promise passing the count data
            defer.resolve(results.rows.length);
        });
    });

    //return a promise
    return defer.promise();
}

var countPromise = getCustomerCount();

//when the promise is resolved do something with the data
$.when(countPromise).done(function(count) {
    //now use count, could be you call another function that needs to use count,
    exampleThatUsesCount(count);
   //or assign it to another variable, or trigger an event that someone else in you app is    listening for
});


function exampleThatUsesCount(count) {
    //do something that uses count here
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM