Транзакция Web SQL возвращается пустой - PullRequest
0 голосов
/ 21 июля 2011

Это работает, когда я использую обратный вызов успеха для прямой записи в DOM. Но я хотел бы отделить данные от отображения и просто возврат и массив. Все, что я пробовал, возвращает и пустой массив. Какие-нибудь мысли? Нужно ли использовать какое-то закрытие?

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 Ответ

1 голос
/ 21 июля 2011

Транзакция выполняется асинхронно, поэтому вам нужно что-то сделать с результатом обратного вызова. Например:

..
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 асинхронный: он не блокируется во время выполнения и просто выполняет обратный вызов с ошибкой или успешным завершением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...