问题本身可能看起来有点令人困惑,但我会尝试在下面解释。
所以我有多个必须执行的查询,所有这些都取决于前一个。
假设我正在执行查询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有时很难处理,尤其是使用需要花费很长时间并执行依赖于前一个的函数的函数。
答案 0 :(得分:-1)
我设法解决了这个问题。我的老师给了我一个提示,即可以在彼此之后执行多个查询,而不需要为每个查询使用函数。
我每次都将结果保存在一个数组中,在最后一个查询的resulthandler中,我做了所有必须完成的事情(比如创建元素和那些东西)。例如,我遍历每个数组,以显示与数组中的每个对象相对应的正确信息。 (在我的例子中,循环遍历主题,然后循环遍历问题并检查该问题是否属于该主题,然后循环回答并检查该答案是否属于该问题)。
之后一切都很顺利!
感谢有关回调函数的信息!我会牢记这一点!