Javascript handleResult在executeAsync上调用了多次?
在MDC上的文档之后,我写了一些东西来阅读历史并在文本框中显示它:Javascript handleResult在executeAsync上调用了多次?,javascript,sqlite,firefox-addon,storage,Javascript,Sqlite,Firefox Addon,Storage,在MDC上的文档之后,我写了一些东西来阅读历史并在文本框中显示它: var dbConnection = database.getDBConnection(); var getHistoryStatement = dbConnection.createStatement("SELECT destinationUrl FROM uploadHistory ORDER BY id DESC"); getHistoryStatement.executeAsync({ handleResul
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个结果,另一次调用其余结果。我找不到关于这种行为的任何信息,谷歌什么也没发现。有人知道这种行为,或者知道如何让HandlerResult只调用一次并得到所有结果吗
这是在Firefox4上运行的。我不认为你的意思是说它在不同的线程上被调用;回调总是在调用
executeAsync
的线程上调用handleResult
可以多次调用,并且(尽管您可能没有看过该页面)。我不认为您的意思是说它在不同的线程上被调用;回调总是在调用executeAsync
的线程上调用handleResult
可以多次调用,并且(尽管您可能没有看过该页面)。噢,谢谢,我确实错过了该页面。我想它可能不在另一个线程上,但我在那里有一些alert()语句,一次出现两个,这让我觉得这两个回调是同时发生的。另外,奇怪的是,Chromebug在第一次回调时未能命中断点。当显示警报对话框时,事件循环旋转,这意味着您的HandlerResult可以重新输入(这就是为什么嵌套偶数循环通常被认为是不好的)。哦,谢谢,我错过了那个页面。我想它可能不在另一个线程上,但我在那里有一些alert()语句,一次出现两个,这让我觉得这两个回调是同时发生的。奇怪的是,Chromebug在第一次回调时未能命中断点。当显示警报对话框时,事件循环旋转,这意味着可以重新输入HandlerResult(这就是为什么嵌套偶数循环通常被认为是不好的)。