Извлечение данных из объекта, не работающего в Ionic

Я приложил $cordovaSQLite к своему ионному приложению. Вот базовый пример кода.

function retrieve() {
var q = $q.defer();

var query = 'SELECT user_credentials, user_id FROM Users;';

$ionicPlatform.ready(function (){
  $cordovaSQLite.execute(db, query).then(function(res) {
    if (res.rows.length > 0) {
      console.log("found user");
      console.log(res);
      console.log(JSON.stringify(res));
      q.resolve(res.rows[0]);
    } else {
      console.log("no rows found");
      q.resolve(false);

    }
  }, function (err) {
    q.reject(err);
  });
});

return q.promise;
}

Вот код, чтобы открыть db.

if(window.cordova) {
  // App syntax
  db = $cordovaSQLite.openDB( "CoolApp.db" );
} else {
  // Ionic serve syntax
  db = window.openDatabase("CoolApp.db", "1.0", "Cool App", -1);
}

Когда я тестирую свое приложение в Chrome, мои журналы показывают это

rows: SQLResultSetRowList
  0: Object
    user_credentials: "asdf"
    user_id: 234
  length: 1
rowsAffected: 0

Однако, когда я просматриваю журналы при работе в моем приложении iOS или Safari, я получаю

{"rows":{"length":1},"rowsAffected":0,"insertId":1}

Мой вопрос: почему я не получаю значение rows? Почему это работает в браузере, но не на iOS?

Ответ 1

Вы можете получить результаты, запросив метод rows.item с соответствующим индексом, если было возвращено несколько результатов.

var elements = [];
for (var i = 0; i < result.rows.length; i++) {
    elements.push(result.rows.item(i));
}
return elements;

Если результатом является объект, возвращенный $cordovaSQL, когда его обещание завершено.

Ответ 2

Вы пытались создать экземпляр webSQL вместо SQLite DB для своего браузера?

Вы всегда можете вернуться к SQLite для своего устройства, но современные браузеры, такие как Chrome и Firefox, не поддерживают SQLite.