Reputation: 2018
I have the following code:
function getRetailerName(retailerID) {
var retailerName;
db.transaction(function retName(qry) {
qry.executeSql("SELECT retailerName FROM retailers WHERE token = '" + retailerID + "' ", [], function (tx, results1) {
var len1 = results1.rows.length;
var retailerName;
for (var i1 = 0; i1 < len1; i1++) {
retailerName = results1.rows.item(i1).retailerName;
//alert(results1.rows.item(i1).retailerName);
}
});
return retailerName;
});
alert(retName());
}
I am trying to get the value from the inner function retName()
and ultimately call getRetailerName()
to get the value from the database, however it keeps giving me an error that retName
is not defined?
I have tried a lot here,
Upvotes: 1
Views: 118
Reputation: 665574
You cannot (since the retName
named function expression is only available inside it) and You should not try to do this (since the functions are asynchronous and it wouldn't work). Instead, use callbacks:
function getRetailerName(retailerID, callback) {
var retailerName;
db.transaction(function retName(qry) {
qry.executeSql("SELECT retailerName FROM retailers WHERE token = '" + retailerID + "' ", [], function (tx, results1) {
var len1 = results1.rows.length;
for (var i1 = 0; i1 < len1; i1++) {;
callback(results1.rows.item(i1).retailerName);
}
});
});
}
getRetailerName(1, alert.bind(window));
Upvotes: 1
Reputation: 30092
You can't do it like that because it's asynchronous. By the time you return from the function the query hasn't completed. Instead, pass a callback to be executed:
function getRetailerName(retailerID, callback) {
var retailerName;
db.transaction(function retName(qry) {
qry.executeSql("SELECT retailerName FROM retailers WHERE token = '" + retailerID + "' ", [], function (tx, results1) {
var len1 = results1.rows.length;
var retailerName;
for (var i1 = 0; i1 < len1; i1++) {
retailerName = results1.rows.item(i1).retailerName;
callback(retailerName);
}
});
});
}
getRetailerName(1, function(name) {
alert(name);
});
Upvotes: 3