0
繼MDC的Storage文檔,我寫的東西讀一些歷史,並顯示在一個文本框:handleResult在executeAsync上多次調用?
var dbConnection = database.getDBConnection();
var getHistoryStatement = dbConnection.createStatement("SELECT destinationUrl FROM uploadHistory ORDER BY id DESC");
getHistoryStatement.executeAsync({
handleResult: function(aResultSet){
var newHistoryString = "";
for (var row = aResultSet.getNextRow(); row; row = aResultSet.getNextRow()) {
newHistoryString += row.getResultByName("destinationUrl") + "\n";
}
document.getElementById("historyText").value = newHistoryString;
},
handleError: function(aError){
},
handleCompletion: function(aReason){
}
});
然而,這是失敗,因爲handleResult獲取調用在不同的線程兩次:一個與第3結果和其餘的結果。我找不到the docs中有關此行爲的任何信息,而谷歌什麼也沒有。任何人都知道這種行爲或如何獲得handleResult僅被調用一次的所有結果?
這是在Firefox上運行4
謝謝,我確實錯過了那一頁。我猜它可能不在另一個線程中,但我在那裏有一些alert()語句,並且我一次有兩個顯示,這讓我覺得這兩個回調正在發生。奇怪的是,Chromebug在第一次回調中未能達到斷點。 – RandomEngy 2011-05-05 16:26:06
當顯示警告對話框時,事件循環旋轉,這意味着您的handleResult可以重新進入(這就是爲什麼嵌套的偶數循環通常被認爲是不好的原因)。 – sdwilsh 2011-05-08 00:13:23