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");
}
}