Angularjs 基于sqllite的离子框架
我使用的是离子框架 我正在执行以下步骤 1) 当我的应用程序运行时。它将创建数据库和表 2) 一旦使用登录,我就将数据保存到mysql并转到仪表板页面Angularjs 基于sqllite的离子框架,angularjs,ionic-framework,ionic,Angularjs,Ionic Framework,Ionic,我使用的是离子框架 我正在执行以下步骤 1) 当我的应用程序运行时。它将创建数据库和表 2) 一旦使用登录,我就将数据保存到mysql并转到仪表板页面 dbQuery.insertCategory(); $state.go('app.dashboard'); dbQuery是一个工厂 .factory('dbQuery', function ($http, $q, $cordovaSQLite, localstorage) { return { insertCat
dbQuery.insertCategory();
$state.go('app.dashboard');
dbQuery是一个工厂
.factory('dbQuery', function ($http, $q, $cordovaSQLite, localstorage) {
return {
insertCategory: function () {
$http({
url: "http://mydoman.comcategory",
method: 'GET',
withCredentials: true,
}).success((function (result) {
var user_id = localstorage.get('user_id');
var query = "INSERT OR IGNORE INTO categories (category_id, user_id, category_name,category_type) VALUES (?,?,?,?)";
var data = '';
result.forEach(function (category) {
$cordovaSQLite.execute(db, query, [category.id,user_id, category.category_name, category.category_type]).then(function (res) {
console.log("insertId");
}, function (err) {
console.dir(err);
});
});
}))
},
哪个工作正常
在仪表板上,我显示了类别列表,但什么也没找到
我进行了调试,发现插入类别需要时间
有没有办法进行双向数据绑定
谢谢为什么不使用承诺,并在成功承诺触发后只重定向到
app.dashboard
例如:
dbQuery.insertCategory().then(function(result) {
$state.go('app.dashboard');
}, function(error) {
console.error(error);
});
然后在你的工厂里,你可以有这样的东西:
.factory('dbQuery', function ($http, $q, $cordovaSQLite, localstorage) {
return {
insertCategory: function () {
var deferred = $q.defer();
$http({
url: "http://mydoman.comcategory",
method: 'GET',
withCredentials: true,
}).success((function (result) {
var user_id = localstorage.get('user_id');
var query = "INSERT OR IGNORE INTO categories (category_id, user_id, category_name,category_type) VALUES (?,?,?,?)";
var data = '';
result.forEach(function (category) {
isWaiting = true;
$cordovaSQLite.execute(db, query, [category.id,user_id, category.category_name, category.category_type]).then(function (res) {
console.log("insertId");
isWaiting = false;
}, function (err) {
console.dir(err);
isWaiting = false;
});
while(isWaiting) {}
});
deferred.resolve("done");
}))
return deferred.promise;
},
我所做的很多只是理论,但它应该给你一个想法。我创建了一个布尔值以使SQL命令同步。由于它们是同步的,当循环结束时,您可以返回您的成功承诺
也许还有其他一些方法可以让你做到这一点。比如,将SQL内容移动到它自己的函数中,然后递归地输入它
让我知道这些方法是否对您有效。效果很好,但请您解释一下为什么使用isWaiting=false;(isWaiting){}时这又有什么作用?
$cordovaSQLite.execute
是异步的,因此通过循环,您将有x个异步调用,并立即从insertCategory
返回,即使它们没有完成。通过添加该循环,在当前SQLite函数完成之前,它不会移动到下一个for循环迭代。至少在理论上它会这样做,因为我没有测试它。当我们确定所有SQLite调用/for循环迭代都已完成时,就要解决这个问题,因为我们确信我们已经完成了。有道理?