私のFirefox拡張機能には、いくつかのテーブルを持つsqliteデータベースがあります。executeAsync()を使用して、テーブルを更新し、いくつかの新しいデータを挿入し、いくつかの値を選択しました。セレクトケースは私にいくつかの問題を引き起こします。
handleCompletion()-function内で、テーブルから取得したデータを別の関数に渡すことができます(たとえば、結果を警告することができます)。しかし、結果を呼び出し元の関数に返したいと思います。問題の答えをネットで検索しましたが、解決策が見つかりません。
私が見つけたもの:
retrieveData: function() {
var rows = new Array();
if (this.dbConn.connectionReady){
statement = this.dbConn.createAsyncStatement("SELECT * " +
"FROM 'domains' " +
";");
statement.executeAsync ({
handleResult: function(aResultSet) {
var i = 0;
for (let row = aResultSet.getNextRow(); row; row = aResultSet.getNextRow()) {
rows[i] = row;
++i;
}
},
handleError: function(anError) {
alert("error");
},
handleCompletion: function(aReason) {
if (aReason != Components.interfaces.mozIStorageStatementCallback.REASON_FINISHED) {
// something went wrong
alert("error2");
}
}
});
}
return rows;
}
このコードは期待される結果を返しません。このステートメントは、メソッドが配列の「行」を返した後に実行されます。したがって、私の呼び出し関数はテーブルからデータを受信できません...
どうすればこの問題を解決できますか?テーブルのデータ行を返すためのタイムアウトのようなものはありますか?
助けてくれてありがとう!