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