带有sqlite代码的Javascript循环

带有sqlite代码的Javascript循环,javascript,sqlite,loops,Javascript,Sqlite,Loops,我使用下面的代码 t.executeSql('SELECT buildingcode, flatname, flatdescription FROM buildingflats WHERE buildingcode = ? ORDER BY flatname ASC',[buildingcode], function(t, resultflatcomment) { var j, lenflatcomments = resul

我使用下面的代码

        t.executeSql('SELECT buildingcode, flatname, flatdescription FROM buildingflats WHERE buildingcode = ? ORDER BY flatname ASC',[buildingcode], function(t, resultflatcomment) {
            var j,
                lenflatcomments = resultflatcomment.rows.length,
                rowflatcomments,
                row;

            if (lenflatcomments > 0 ) {
                for (j = 0; j < lenflatcomments; j += 1) {
                    rowflatcomments = resultflatcomment.rows.item(j);
                    alert(rowflatcomments.flatname);
                    t.executeSql('SELECT DISTINCT flatdescription, flatname, buildingcode FROM bill WHERE buildingcode = ? AND flatdescription = ?',[buildingcode, rowflatcomments.flatname], function(t, resultflat) {
                        var len = resultflat.rows.length;

                        if (len > 0) {
                            row = resultflat.rows.item(0);
                            alert(row.flatdescription);

                        } else {
                            alert(rowflatcomments.flatname);

                        }
                        $("#opt2").selectmenu('refresh');
                    });
                }
            }
        });
但是alertrowflatcomments.flatname;在循环内的SQLite选择之前执行

rowflatcomments.flatname始终是buildingflats的最后一个选择


我怎样才能修好它呢?

我不太清楚,只是个问题。sql中的分号在哪里?nullDataHandler中的警报。简单地说,我想这个问题是不合适的。当调用executeSql时,必然会调用nullDatahandler函数。SQL select将被发送,循环将继续执行。SQL select的回调将在其完成时执行。这回答了你的问题吗?此外,您还可以获取大量警报,然后执行所有回调。回调的顺序也可能与发出回调的顺序不同。唯一可以保证的是警报将按顺序一个接一个地出现。对不起,我不知道如何解决这个问题?对不起,我的英语不好学。