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