2

私は単純なタスクを実行する関数 myFunction を作成しました。つまり、sqlite データベースからデータを取得し、簡単に使用できる配列に保存します。この関数は、これらの手順に従って機能を実行する必要があります。

  1. データベースからデータを取得します。
  2. 配列に保存します。
  3. 配列を返す

ただし、これらの手順をこのシーケンスで実行しています。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 が非同期であるために発生する可能性があります。

4

0 に答える 0