這讓我瘋狂。當從數組中獲取數值時,SQLite DELETE事務不起作用
我有一個消息隊列,我正在使用本地存儲Web數據庫來存儲這些消息,當設備脫機,並且當有互聯網連接它發出這些消息。發送消息後,我希望它們從表中刪除。
當我發出消息時,我保留一個名爲MessageIDs的數組,這樣我可以引用哪些行需要刪除。
我循環遍歷MessageID的長度並獲取每個ID並擁有DELETE事務。我的alert()獲取正確的值,但是當事務執行時,值是未定義的。我努力在交易中編碼一個已知的「ID」,並且工作。有什麼想法嗎?
var MessageIDs = new Array();
//In the block of code not shown I populate MessageIDs and send out messages
for(var j=0; j < MessageIDs.length; j++)
{
alert(MessageIDs[j]); //Pulls the right value
site.data.database.transaction(
function (transaction) {
//[MessageIDs[j]] has a value of undefined and thus doesn't get deleted but the transaction doesn't technically fail either
transaction.executeSql("DELETE FROM Messages WHERE id = ?;", [MessageIDs[j]],
site.contact.removeQueuedMessagesSuccess, site.contact.removeQueuedMessagesError);
}
);
}
WebSQL異步工作。參見[WebSQL數據庫+ Javascript循環](http://stackoverflow.com/questions/4825455/web-sql-database-javascript-loop)。 (你也可以在一個查詢中執行所有的刪除操作:'executeSql(「DELETE FROM Messages where Message in(?,?,?,...)」,MessageIDs)')。 – DCoder
哦,沒有辦法,我沒有意識到這是異步的,謝謝你的頭!我最終在for循環中使用了閉包技術,我沒有顯示這些代碼來填充SuccessID和ErrorIDs數組(因此我不會刪除發出問題的消息),然後調用一個單獨的方法根據SuccessID的數量刪除並動態創建我需要的數量,並按照您的建議在單個查詢中完成所有操作。工作順利。如果您想添加「答案」,我很樂意接受它! – Matt