Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.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
SQLite+Javascript:在每个函数中执行多个查询_Javascript_Sqlite - Fatal编程技术网

SQLite+Javascript:在每个函数中执行多个查询

SQLite+Javascript:在每个函数中执行多个查询,javascript,sqlite,Javascript,Sqlite,这个问题本身可能有点让人困惑,但我会在下面解释 因此,我必须执行多个查询,所有查询都取决于前一个查询 假设我正在执行查询A,完成后,必须使用检索到的数据查询A执行查询B。在查询B检索到它的数据后,必须使用该特定数据执行查询C 但是,当查询B正在执行时,FOR循环正在执行它的工作,并且多次执行查询C查询B会发现3个结果,因此在查询B的生命周期内,查询C必须执行3次 在下面的代码中,我可以尝试使用更简化的现有无代码详细信息来模拟这种情况: 要执行的第一个函数是QueryA,单击按钮: functio

这个问题本身可能有点让人困惑,但我会在下面解释

因此,我必须执行多个查询,所有查询都取决于前一个查询

假设我正在执行查询A,完成后,必须使用检索到的数据查询A执行查询B。在查询B检索到它的数据后,必须使用该特定数据执行查询C

但是,当查询B正在执行时,FOR循环正在执行它的工作,并且多次执行查询C查询B会发现3个结果,因此在查询B的生命周期内,查询C必须执行3次

在下面的代码中,我可以尝试使用更简化的现有无代码详细信息来模拟这种情况:

要执行的第一个函数是QueryA,单击按钮:

function QueryA() {
    db.transation(
        function(tx) {
           tx.executeSql('SELECT * FROM TableA',
               function(tx, results) {
                   QueryB(results);
               });
           });
}


function QueryB(results)
{
    for(var i = 0; i < results.rows.length; i++)
    {
        db.transaction(
           function(tx) {
              tx.executeSql('SELECT * FROM TableB WHERE FIELDB = ?, [results.rows.item(i)],
                   function(tx, result) {
                       QueryC(result);
                   });
           });
    }
}


function QueryC(result) {
    for(var i = 0; i < result.rows.length; i++) {
         console.log(results.rows.item(i).description); //description being a field
    }
}
真正的问题是所有这些函数都是异步的。。这意味着它们将在检索数据之前执行,并导致错误。在本例中,我省略了ErrorHandler,它们出现在我当前的代码中,我只是想解释一下我的问题

我不知道回调函数是如何工作的,因为我需要完成这项工作。 欢迎任何意见!请用一些代码展示它,这样我就可以理解解决方案是如何工作的

谢谢大家!


作为提醒,我正在使用Javascript和SQLite。我知道Javascript有时很难使用,尤其是使用需要花费相当多时间的函数和执行依赖于前一个函数的其他函数。

我设法解决了这个问题。我的老师给了我一个提示,多个查询可以一个接一个地执行,而不必为每个查询使用函数

每次我都将结果保存在一个数组中,在上次查询的resulthandler中,我做了所有必须做的事情,比如创建元素等等。例如,我在每个数组上循环,以显示与数组中每个对象对应的正确信息。在我的例子中,循环主题,然后循环问题,检查问题是否属于该主题,然后循环答案,检查答案是否属于该问题

事后一切都很顺利


不过,感谢您提供有关回调函数的信息!我会记住的

从TableA内部联接TableB中选择TableB.*其中TableB.FIELDB=TableA.somefield不需要两个查询。真正的问题是所有这些函数都是异步的。。这意味着它们将在检索数据之前执行,并导致错误号。您将向db.transaction和tx.executeSQL传递一个函数,该函数在获取结果时被调用,因此为result对象。回调函数仅在获取数据时执行。JS始终为单线程,所以这不是问题所在。你能解释一下为什么第二个is查询是循环的,当它从第一个函数中被调用时,它从不执行吗?它在db.transaction之后退出,并且从不执行第二个查询。