Javascript db.transaction完成后的WebSQL递归循环

Javascript db.transaction完成后的WebSQL递归循环,javascript,jquery,cordova,Javascript,Jquery,Cordova,我正在尝试遍历从db.transaction返回的一组结果。在这个循环中,我将html内容附加到JavaScript变量,一旦循环完成,就会使用jQuery的html()函数将其添加到DOM中。这正如预期的那样有效 问题是在循环期间,我正在进行另一个db.transaction查询。我遇到的问题是第二个查询(在循环中)在移动到循环的下一个迭代之前没有完成 我最初使用了for()循环,但我认为这就是问题的原因,因为for循环无法知道循环中的db.transaction是否已完成 所以我决定使用递归

我正在尝试遍历从
db.transaction
返回的一组结果。在这个循环中,我将html内容附加到JavaScript变量,一旦循环完成,就会使用jQuery的
html()
函数将其添加到DOM中。这正如预期的那样有效

问题是在循环期间,我正在进行另一个
db.transaction
查询。我遇到的问题是第二个查询(在循环中)在移动到循环的下一个迭代之前没有完成

我最初使用了
for()
循环,但我认为这就是问题的原因,因为for循环无法知道循环中的
db.transaction
是否已完成

所以我决定使用递归循环,它看起来像:

var html_content = '<table class="booking-table"><tbody>';
var i = 0;

function getPhotoCountForSyncItemSuccessRecursive(i){
    html_content += "More HTML content, not relevant"
    localStorage.setItem("current_row_booking_id", results.rows.item(i).id);
    i++;
    db.transaction(getPhotoCountForSyncItem, getPhotoCountForSyncItemFailRecursive,                 getPhotoCountForSyncItemSuccessRecursive(i));

    if (i == results.rows.length){
        html_content += '</tbody></table>';
        $('.booking-items-wrapper').html(html_content);
    }
}

getPhotoCountForSyncItemSuccessRecursive(i);
如您所见,我调用一个函数
getPhotoCountForSyncItem
,成功后,调用递归函数
getphotocountforsyncitemsccessrecursive(I)
(创建我的循环)

我的
getPhotoCountForSyncItem
(及其成功和失败回调)如下所示:

function getPhotoCountForSyncItem(tx){
    tx.executeSql("SELECT * FROM booking_photo WHERE booking_id = '" + localStorage.getItem("current_row_booking_id") + "'", [], getPhotoCountForSyncItemSuccess, getPhotoCountForSyncItemFail);
}

function getPhotoCountForSyncItemFail(tx, results){
  console.log("getPhotoCountForSyncItemFail");
  localStorage.removeItem("current_row_booking_id");
}

function getPhotoCountForSyncItemSuccess(tx, results){
    if (results.rows.length == 0){
        console.log('no photos');
        localStorage.removeItem("current_row_booking_id");
    } else {
        console.log('got photos ' + results.rows.length);
        localStorage.removeItem("current_row_booking_id");
    }
}

我遇到的问题是递归函数(
getPhotoCountForSyncItem successrecursive
),只有在
getPhotoCountForSyncItem
函数完成后才应再次调用该函数。有什么问题的建议吗?有更好的方法吗?

该死的老兄,我问了将近三年了,没人能帮你。。。?你打算怎样完成这个项目???
function getPhotoCountForSyncItem(tx){
    tx.executeSql("SELECT * FROM booking_photo WHERE booking_id = '" + localStorage.getItem("current_row_booking_id") + "'", [], getPhotoCountForSyncItemSuccess, getPhotoCountForSyncItemFail);
}

function getPhotoCountForSyncItemFail(tx, results){
  console.log("getPhotoCountForSyncItemFail");
  localStorage.removeItem("current_row_booking_id");
}

function getPhotoCountForSyncItemSuccess(tx, results){
    if (results.rows.length == 0){
        console.log('no photos');
        localStorage.removeItem("current_row_booking_id");
    } else {
        console.log('got photos ' + results.rows.length);
        localStorage.removeItem("current_row_booking_id");
    }
}