JavaScript匿名函数变量
我正在开发一个PhoneGap应用程序,我有一段循环代码JavaScript匿名函数变量,javascript,scope,Javascript,Scope,我正在开发一个PhoneGap应用程序,我有一段循环代码 htmlR += "html code here"; tx.executeSql('SELECT Question,Grp from KnowSelf where Dimension = "'+result.Dimension+'"', [], function(tx,resultR){ var leng = resultR.rows.length; for(var i = 0; i < leng; i++){
htmlR += "html code here";
tx.executeSql('SELECT Question,Grp from KnowSelf where Dimension = "'+result.Dimension+'"', [], function(tx,resultR){
var leng = resultR.rows.length;
for(var i = 0; i < leng; i++){
var resultsR = resultR.rows.item(i);
htmlR += '<li class="catsli">'+resultsR.Question+'</li>';
htmlR += '<li class="line"><img class="line" src="iPhone3/Line.png" alt="line"/></li>';
}
},errorCB);
htmlR += "continue html code here";
htmlR+=“此处的html代码”;
tx.executeSql('SELECT Question,Grp from KnowSelf,其中Dimension=“”+result.Dimension+”,[],函数(tx,resultR){
var leng=resultR.rows.length;
对于(变量i=0;i'+resultsR.Question+';
htmlR+=';
}
},errorCB);
htmlR+=“在此处继续html代码”;
我的问题是,在tx.executeSql(……htmlR+=
li
标记中
没有添加到外部
htmlR
我怀疑executeSQL
没有立即调用回调,而是异步调用,因此您不会立即看到结果。如果是这样,正确的处理方法是根据回调中的结果而不是在cal之后执行所有处理lingexecuteSQL
。例如,更改:
// Do Something
doSomething();
// Do some SQL
executeSQL(..., function() {
// ...deal with callback...
});
// Do something after SQL
doSomethingElse();
到
应该是这样的,您传递给
executeSql
的函数是一个覆盖它的函数,我看不到它在任何地方。您确定executeSql
接受的回调是同步发生的吗?听起来可能是异步的,因此您不会立即看到结果。@t.J.Crowder:我强烈认为它是异步的;否则,它会不需要回调。@SLaks:我希望如此,但这不是唯一的原因。:-)你们说得对,它是异步的。不管怎样?谢谢你,我会试试这个。虽然你的解决方案是有道理的,但它在我的情况下不起作用。但是感谢异步提示,我只需要更改我的逻辑
// Do Something
doSomething();
// Do some SQL
executeSQL(..., function() {
// ...deal with callback...
// Do something after SQL
doSomethingElse();
});