确定SQL select是否异步返回空集?

时间:2012-07-03 02:39:29

标签: sql firefox-addon

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

我的想法是将handleResult和handleCompletion作为对象的成员函数,并让handleResult更新handleCompletion可以检查的成员变量。如果设置了变量,则不为空,如果变量未设置,则为空且可以相应地执行操作。

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

1 个答案:

答案 0 :(得分:1)

勾勒出一个解决方案(我上面的想法)(编辑2:我在下面做出的评论)

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
});

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

edit1:这不符合我的预期(它有效,但不是100%确定原因)。即,如果handleResult永远不运行,则this.results变量是未定义的(非假)。所以看起来好像handleResult和handleCompletion正在运行一组不同于我期望的变量。

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