我正在尝试迭代动态数组作为select查询的输入。不会为所有数组元素触发select查询。我在for循环中编写了select查询,问题是循环首先触发,而select查询仅针对数组的最后一个元素执行。可能是由于异步功能。我该如何解决这个问题,我的代码如下,
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;
}
});
});
}
}
任何建议,
答案 0 :(得分:0)
尝试简化代码。我认为问题是for
内部for
具有相同的迭代器名称。
以下是我将尝试此操作的示例:
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;
}
});
}
}
我没有循环遍历两组值,而是将myLocation
数组编译成一个可以在IN
sql语句中使用的字符串。这将返回myLocation
数组的所有结果,然后迭代它们进行处理。
这减少了大量处理,并且还在函数中创建了更少的失败点。