Reputation: 2311
I am trying to iterate an dynamic array as input for select query. The select query is not firing for all array elements. I wrote select query in for loop, the problem is loop is firing first and the select query is performing only for last element of array. may be this due to asynchronous function. How can I resolve this, My code is as follows,
function sendCategoryDetailsNew(myLocation)
{
var myLocationcoordinates = new Array();
var db = window.sqlitePlugin.openDatabase({name: "MYDB"});
for (var i = 0; i < myLocation.length; i++)
{
var locationName = myLocation[i];
alert(locationName);
db.transaction(function (tx) {
tx.executeSql("select Coordinates from Locationlog WHERE Location = '"+locationName+"';", [], function (tx, res)
{
for (var i = 0; i < res.rows.length; i++)
{
alert("Location : "+locationName+ " Latlongs :"+ res.rows.item(i).Coordinates);
myLocationcoordinates[i] = res.rows.item(i).Coordinates;
}
});
});
}
}
Any suggestions,
Upvotes: 0
Views: 2070
Reputation: 6029
Try simplifying the code. I think the issue is having a for
inside of a for
with the same iterator name.
Here is an example of how I would try this:
function sendCategoryDetailsNew(myLocation)
{
var myLocationcoordinates = new Array();
var db = window.sqlitePlugin.openDatabase({name: "MYDB"});
var locationsList = "\'" + myLocation.join("\',\'") + "\'";
db.transaction(function (tx) {
tx.executeSql("SELECT Location, Coordinates FROM Locationlog WHERE Location IN (?)", locationsList, function(tx, res) {
for (var i = 0; i < res.rows.length; i++)
{
console.log("Location : " + res.rows.item(i).Location + " Latlongs : " + res.rows.item(i).Coordinates);
myLocationcoordinates[i] = res.rows.item(i).Coordinates;
}
});
}
}
Instead of looping through two sets of values, I have compiled the myLocation
array into a string that can be used in an IN
sql statement. This will return all results for the myLocation
array and then iterate through them for processing.
This cuts down a lot of processing and also creates less fail points in the function.
Upvotes: 1