Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript handleResult在executeAsync上调用了多次?_Javascript_Sqlite_Firefox Addon_Storage - Fatal编程技术网

Javascript handleResult在executeAsync上调用了多次?

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

在MDC上的文档之后,我写了一些东西来阅读历史并在文本框中显示它:

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(这就是为什么嵌套偶数循环通常被认为是不好的)。