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

时间:2015-03-05 16:29:33

标签: javascript sqlite

问题本身可能看起来有点令人困惑,但我会尝试在下面解释。

所以我有多个必须执行的查询,所有这些都取决于前一个。

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

但是当查询B正在执行时,FOR循环正在执行它的工作并多次执行查询C(查询B找到3个结果,因此查询C必须在查询的生命期内执行3次B)。

在下面的代码中,我可以尝试使用更简化的现有代码形式来模拟情况(更少细节):

要执行的第一个函数是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
    }
}

真正的问题是所有这些函数都是异步的......这意味着它们将在检索数据之前执行并导致错误(我在本例中省略了错误处理程序,它们存在于我当前的代码中,I只想解释我的问题。)

我不知道回调函数是如何工作的,因为我需要关闭它。 欢迎任何建议! (并且请用一些代码显示它,这样我就能理解解决方案是如何工作的。)

谢谢!

只是提醒一下,我正在使用Javascript和SQLite。我知道Javascript有时很难处理,尤其是使用需要花费很长时间并执行依赖于前一个的函数的函数。

1 个答案:

答案 0 :(得分:-1)

我设法解决了这个问题。我的老师给了我一个提示,即可以在彼此之后执行多个查询,而不需要为每个查询使用函数。

我每次都将结果保存在一个数组中,在最后一个查询的resulthandler中,我做了所有必须完成的事情(比如创建元素和那些东西)。例如,我遍历每个数组,以显示与数组中的每个对象相对应的正确信息。 (在我的例子中,循环遍历主题,然后循环遍历问题并检查该问题是否属于该主题,然后循环回答并检查该答案是否属于该问题)。

之后一切都很顺利!

感谢有关回调函数的信息!我会牢记这一点!