У меня есть приложение для платформы Crossova Cross Platform, разработанное с помощью AngularJS, которое реализует базу данных SQLite. Идея состоит в том, что пользователи могут войти в систему, и их данные будут храниться в базе данных SQLite для доступа к автономному (например, функция «Запомнить меня»).
На экране входа в систему я запускаю запрос, чтобы проверить, есть ли значения в таблице SQLite сразу после запуска приложения. Затем, в зависимости от того, есть ли значения в таблице, я показываю экран подтверждения входа ИЛИ просим пользователей ввести свои данные.
База данных работает по назначению, и я могу сохранять и читать данные в/из нее. Однако, поскольку база данных обрабатывает вызовы асинхронно, мне не удается отобразить правильный пользовательский интерфейс для пользователя.
В моем представлении логинов У меня есть переменная для хранения логического значения, содержит ли таблица SQLite значения. Однако переменная всегда empty/null, потому что асинхронный вызов отвечает после инициализации переменной.
Я пытаюсь реализовать $ q для инициализации переменной после завершения асинхронного вызова, но у меня возникают проблемы с реализацией. не
Мой вид контроллер выглядит следующим образом:
Контроллер
var login = angular.module("loginController", []);
login.controller("LoginController", function ($scope, $q, QueryRememberMe) {
// Check if user logged in
var logged = QueryRememberMe.query();
logged.then(function (greeting) {
alert("Success: " + greeting);
}, function(reason) {
alert("Failed: " + reason);
});
};
});
QueryRememberMe Service
var queryRememberMe = angular.module("queryRememberMe", []);
queryRememberMe.service("QueryRememberMe", function ($q, Database) {
var db = Database.init();
var tableName = "tb_UD_remember_me";
var userLoggedIn = "";
var myFunctions = {
query: function() {
return $q(function (resolve, reject) {
var sql = 'SELECT * FROM ' + tableName;
db.transaction(function (tx) { tx.executeSql(sql, [], myFunctions.success, myFunctions.error); });
if (myFunctions.success) {
resolve('Hello, success!');
}
else {
reject('Greeting ERROR - is not allowed.');
}
});
},
// Query success callback
success: function (tx, results, tableName) {
// There are no values in the table
if (results.rows.length == 0) {
userLoggedIn = false;
}
else {
userLoggedIn = true;
}
return userLoggedIn;
},
// Query Error Callback
error: function (tx, err) {
alert("An error has occured - Unable to query SQL Table " + tableName);
},
}
return myFunctions;
});