0

小さな webapp に Cordova と Angular を使用しています。実装プロセスは次のとおりです。

  1. LogsModel創造された
  2. queryLogs()と呼ばれる
  3. getLogsArray()が呼び出されます – この時点で、関数定義であっても、 をconsole.log(this.logs['0'])返しますundefined。私はなぜなのか理解していない。

LogsModel.prototype.logs = {};

LogsModel.prototype.getLogsArray = function (){
    console.log(this.logs['0']);
    return this.logs;
};

LogsModel.prototype.queryLogs = function (){

    var self = this;

    function getFromDb (tx){
        tx.executeSql('SELECT * FROM DEMO',[],querySuccess,self.query_fail);
    }

    function querySuccess(tx,results){
        var len = results.rows.length;

        for(var i = 0; i < len; i++){

            var log = {
                verb: results.rows.item(i).verb
            };
            self.logs[i]= {
                verb: results.rows.item(i).verb
            };
        }
    }
    this.db = window.openDatabase("Database","1.0","Cordova Demo",200000);
    this.db.transaction(getFromDb,self.transaction_fail);
};
4

1 に答える 1

0

queryLogs非同期タスクです。getLogsArrayトランザクションを開始した直後に呼び出すと、配列にはまだデータが取り込まれません。

代わりに、関数から呼び出すコールバックを使用してquerySuccess処理を続行します (結果のログ記録など)。

于 2012-09-25T16:28:17.637 に答える