私は単純なタスクを実行する関数 myFunction を作成しました。つまり、sqlite データベースからデータを取得し、簡単に使用できる配列に保存します。この関数は、これらの手順に従って機能を実行する必要があります。
- データベースからデータを取得します。
- 配列に保存します。
- 配列を返す
ただし、これらの手順をこのシーケンスで実行しています。3、1、2なので、データを取得せずに返されるため、データを取得していません。
例えば
function myFunction() {
var ret;
var arr = [];
db.transaction(function (trans) {
trans.executeSql('SELECT * FROM tblname', [],
function (transaction, result) {
if (result != null && result.rows != null) {
for (var i = 0; i < result.rows.length; i++) {
var row = result.rows.item(i);
ret = row.urlcolmn;
arr.push(ret);
alert('alert 1'); // just to check which line(alert) is called first
}
}
}, errorHandler);
}, errorHandler, nullHandler);
alert('alert 2'); // just to check which line(alert) is called first
return arr;
}
上記のコードでは、アラート 2 がアラート 1 の前に表示されています。これが、配列に値を返さない理由です。この問題は、JS の sqlite が非同期であるために発生する可能性があります。