2011-07-21 55 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是異步的:它在執行時不會阻塞,只是在完成時執行錯誤或成功回調。