0
这很容易吗?看起来handleResult方法只在结果不是空集时执行。确定SQL选择是否异步返回空集?
我想过的是让handleResult和handleCompletion成为一个对象的成员函数,并让handleResult更新handleCompletion可以检查的成员变量。如果变量被设置,而不是空的,如果变量未设置,则为空并且可以相应地执行。
似乎过于复杂,希望有更好的解决方案?
这很容易吗?看起来handleResult方法只在结果不是空集时执行。确定SQL选择是否异步返回空集?
我想过的是让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
});
这被认为是解决这一问题的好办法?
edit1:这不表现出我期望的方式(它的工作原理,但不是100%肯定为什么)。即,如果handleResult永远不会运行,则this.results变量是未定义的(不是false)。所以它看起来好像handleResult和handleCompletion在一个不同于我预期的变量集合上运行。
任何帮助了解我做错了什么将不胜感激。
http://w3future.com/html/stories/callbacks.xml是我的问题的答案。 需要var me = this;在sql对象和引用内部变量中由“我”。而不是“这个”。 – spotter