0

这很容易吗?似乎仅在结果不是空集时才执行 handleResult 方法。

我的一个想法是让handleResult 和handleCompletion 成为对象的成员函数,并让handleResult 更新handleCompletion 可以检查的成员变量。如果变量已设置,则不为空,如果变量未设置,则为空并且可以相应地采取行动。

似乎过于复杂,希望有更好的解决方案?

4

1 回答 1

1

勾勒出一个解决方案(我上面的想法)(edit2:根据我在下面所做的评论)

function sql() {
    this.results = false;
    var me = this;

    this.handleResult = function(aResultSet) {

        for (var row = aResultSet.getNextRow(); row;  row = aResultSet.getNextRow()) {
            me.results = true;

            var value = row.getResultByName("name");
        }
    };

    this.handleError = function(aError) {
        .... //deal with error
    };

    this.handleCompletion = function(aReason) {
        if (me.results) {
            ....//results
        } else {
            ....//no results
        }

        if (aReason != Components.interfaces.mozIStorageStatementCallback.REASON_FINISHED) {
            ....//handle these
    };
};

s = new sql(); 

statement.executeAsync({
    handleResult: s.handleResult,
    handleError: s.handleError,
    handleCompletion: s.handleCompletion
});

这被认为是解决这个问题的好方法吗?

编辑1:这不符合我的预期(它有效,但不是 100% 确定原因)。即 this.results 变量是未定义的(不是假的),如果 handleResult 从不运行。因此,handleResult 和 handleCompletion 似乎在一组与我预期不同的变量上运行。

任何帮助理解我做错了什么都将不胜感激。

于 2012-07-03T04:23:37.540 回答