我需要使用for循环的结果执行db.transaction。但是在db.transaction完成之前,循环会发生下一次迭代。
db.transaction(function(tx) {
tx.executeSql("select * from unassigned_item", [], function(tx, res) {
var list = '';
if (res != null && res.rows != null && res.rows.length>0) {
for (var i = 0; i < res.rows.length; i++) {
var row = res.rows.item(i);
var serial = row.serialno;
var id = row.unassigned_itemid;
var theSerialNo = row.serialno;
tx.executeSql("select * from unassigned_item where serialno="+ serial + "", [], function(tx, res) {
});
if(row.serialno.indexOf("'")>-1){
theSerialNo = theSerialNo.replace(/'/g,"\\'");
}
list = list + '<li data-icon="false"><a onClick="selectedSerialNo(\'' + theSerialNo + '\', +\'' + id + '\');">' + theSerialNo + '</a></li>';
//list = list + '<li data-icon="false"><a onClick="selectedSerialNo(\'' + theSerialNo + '\', +\'' + id + '\');">' + serial + '</a></li>'
}
}
//list = list + '<li data-icon="false"><a onClick="selectedSerialNo(\'NEW\', 0);">ADD_NEW</a></li>'
$("#serial_suggestions li").remove();
$("#serial_suggestions").append(list);
});
},function(){
},function(){
});
我怎么能实现这个?
答案 0 :(得分:1)
db操作是异步的,因此如果您希望在上一次迭代完成之后完成下一次迭代,则不能在for循环中使用它。
你可以做的是使用变量作为计数器,并在executeSql的成功回调中检查它的值。
这样的事情(抱歉没有时间更深入地检查你的功能应该做什么):
db.transaction(function (tx) {
tx.executeSql("select * from unassigned_item", [], function (tx, res) {
var list = '';
if (res != null && res.rows != null && res.rows.length > 0) {
var i = 0;
function iteration(i, rows) {
var row = res.rows.item(i);
var serial = row.serialno;
var id = row.unassigned_itemid;
var theSerialNo = row.serialno;
tx.executeSql("select * from unassigned_item where serialno=" + serial + "", [], function (tx, res) {
if (row.serialno.indexOf("'") > -1) {
theSerialNo = theSerialNo.replace(/'/g, "\\'");
}
list = list + '<li data-icon="false"><a onClick="selectedSerialNo(\'' + theSerialNo + '\', +\'' + id + '\');">' + theSerialNo + '</a></li>';
i += 1;
if (i < rows.length)
iteration(i, rows);
else
theEnd();
});
}
function theEnd() {
$("#serial_suggestions li").remove();
$("#serial_suggestions").append(list);
}
iteration(i, rows);
}
});
});