Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript匿名函数变量_Javascript_Scope - Fatal编程技术网

JavaScript匿名函数变量

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++){

我正在开发一个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++){
        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;
htmlR+='
  • ; } },errorCB); htmlR+=“在此处继续html代码”;
    我的问题是,在
    tx.executeSql(……htmlR+=
    li
    标记中


    没有添加到外部
    htmlR

    我怀疑
    executeSQL
    没有立即调用回调,而是异步调用,因此您不会立即看到结果。如果是这样,正确的处理方法是根据回调中的结果而不是在cal之后执行所有处理ling
    executeSQL
    。例如,更改:

    // 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();
    });