这可能很容易吗?似乎只有在结果不是空集时才执行handleResult方法。
我的想法是将handleResult和handleCompletion作为对象的成员函数,并让handleResult更新handleCompletion可以检查的成员变量。如果设置了变量,则不为空,如果变量未设置,则为空且可以相应地执行操作。
似乎过于复杂,希望有更好的解决方案?
答案 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正在运行一组不同于我期望的变量。
任何帮助,以了解我做错了什么将不胜感激。