我有以下一段JavaScript的地方,我执行一个SQL查询,并根据结果我需要执行第二个查询。虽然我管理使用闭包来为第二个查询迭代适当的值,但我还是无法将所需的值返回。我一直未定义。从封闭返回值给出undefined
db.transaction(function(tx) {
tx.executeSql('SELECT * FROM maintainance', [], function(tx, results){
maintainance_length = results.rows.length;
maintanance_query = results.rows;
for (i = 0; i < maintanaince_length; i++) {
maintainance_title = maintanance_query[i].element;
var classAction = function(){
if(maintanance_query[i].code == '0'){
return 'no';
}else{
//over here i use the closure to iterate each seperate maintainance_title value
(function(maintainance_title){
db.transaction(function(tx) {
tx.executeSql('SELECT * from maintainance_history WHERE element = \''+maintainance_title+'\'',
[], function(tx, results){
if(results.rows.length > 0 && results.rows[0].action == '1'){
return 'ok';
}else{
return 'warn';
}
},function(tx, error){
console.log(error);
console.log(tx);
});});
})(maintainance_title);
}
}
historyIcon = "<div class=\""+classAction()+"\"></div>";
}
},function(tx, error){
}
);
});
我测试了一些变化OVR部份代码,但仍是结果要么是未捕获的异常的“未定义”那classAction不是一个函数
'classAction()'是一个异步函数,您试图同步调用它。不幸的是,您返回“ok”或“warn”的地方会回到空虚状态,这些返回值并没有真正做到。 'classAction()'底部没有'return',所以它总是返回undefined。 – aaronofleonard
所以,而不是我可以包裹“historyIcon =”
“;”转换成函数,并在每次返回的地方调用它。这样,当每次迭代完成时它会被调用 – nikolas是的,这是我在我的答案中采取的方法,好的想法;) – aaronofleonard