handleResult在executeAsync上多次调用?

时间:2011-05-05 06:41:21

标签: javascript sqlite firefox-addon storage

关于MDC的Storage文档,我写了一些东西来阅读一些历史记录并在文本框中显示:

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在不同的线程上被调用两次:一个具有前三个结果,另一个具有其余结果。我在the docs中找不到有关此行为的任何内容,谷歌也没有发现任何内容。任何人都知道这种行为或如何让handleResult只被调用一次所有结果?

这是在Firefox 4上运行。

1 个答案:

答案 0 :(得分:3)

我不认为你的意思是说它是在不同的线程上调用的;始终在调用executeAsync的线程上调用回调。 handleResult可以被多次调用,that behavior is documented(尽管您可能没有看过该页面)。