2011-07-21 14 views
0

これは、成功コールバックを使用してDOMに直接書き込むときに機能します。しかし、私はディスプレイと単なるリターンとアレイからデータを分離したいと思っています。私が試したすべてが返され、空の配列になります。何かご意見は?私は何らかの種類のクロージャを使用する必要がありますか?Web SQLトランザクションが空に戻ります

function getExercises(){ 
    var result = [] 

    db.transaction(function(tx) { 
      tx.executeSql('SELECT id, title, weight, reps FROM exercises', [],function(tx, rs) { 
       for(var i=0; i<rs.rows.length; i++) { 
        var row = rs.rows.item(i) 
        result[i] = { 
         id: row['id'], 
         title: row['title'], 
         weight: row['weight'], 
         reps: row['reps'] 
        } 

       } 

      }) 
     }) 
    return result; 

}; 

答えて

1

トランザクションは非同期で実行されるため、成功コールバックの結果で何かをする必要があります。例:

.. 
tx.executeSql('SELECT id, title, weight, reps FROM exercises', [],function(tx, rs) { 
     var result = []; 
     for(var i=0; i<rs.rows.length; i++) { 
      var row = rs.rows.item(i) 
      result[i] = { 
        id: row['id'], 
        title: row['title'], 
        weight: row['weight'], 
        reps: row['reps'] 
     } 
     } 
     console.log(result); 
}); 
.. 

結果をコンソールに記録します。

あなたの質問に投稿したコードでは、実行前に実行されるコールバックはありませんreturn resultステートメント - つまり、配列はまだ作成されていません - executeSqlは非同期であるため実行されません終了時にエラーまたは成功のコールバックを実行するだけです。

関連する問題