解決策をスケッチする(上記の考え)(編集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 変数は未定義 (false ではない) です。したがって、handleResult と handleCompletion が、予想とは異なる一連の変数で動作しているかのように見えます。
私が間違っていることを理解するための助けをいただければ幸いです。