【发布时间】:2016-05-26 01:29:35
【问题描述】:
我有一个数据服务,它将处理我所有的数据相关操作,所有这些操作都是异步的。
单击 ERASE 按钮后,有一个函数可以擦除所有数据并返回一个包含操作状态的对象(成功:真/假)。
基于这个值 (TRUE) 我需要路由到另一个视图(说数据已成功擦除页面)。
但是当我第一次点击按钮时,路由没有发生(但擦除功能给出了正确的值(真)。 但是,如果我再次单击同一个按钮,则路线正在发生。
这里是我如何使用我的 removeDatabase()(dataService 的一部分)函数。
self.removeDatabase = function () {
//$location.path("/setup");
dataService.resetDatabase().done(function (msgs) {
if(msgs['Operation_success']){
console.log("Operation is Success ? :"+msgs['Operation_success']);
$location.path("/setup");
//self.loadSetup();
}
});
},
这是服务内部的函数。
appdata.resetDatabase = function () {
appdata.msgs = {};
var deferred = jQuery.Deferred();
appdata.db = window.openDatabase("finbud_db", "1.0", "FinBud", 20);
var d1 = jQuery.Deferred();
appdata.db.transaction(function (tx) {
tx.executeSql('DROP TABLE IF EXISTS BASE_TABLE');
}, function () {
appdata.msgs['BASE_TABLE'] = "Could not Delete";
appdata.msgs['Operation_success'] = false;
d1.resolve();
}, function () {
appdata.msgs['BASE_TABLE'] = "Deleted";
appdata.msgs['Operation_success'] = true;
d1.resolve();
});
var d2 = jQuery.Deferred();
appdata.db.transaction(function (tx) {
tx.executeSql('DROP TABLE IF EXISTS CATEGORY_TABLE');
}, function () {
appdata.msgs['CATEGORY_TABLE'] = "Could not Delete";
appdata.msgs['Operation_success'] = false;
d2.resolve();
}, function () {
appdata.msgs['CATEGORY_TABLE'] = "Deleted";
appdata.msgs['Operation_success'] = true;
d2.resolve();
});
var d3 = jQuery.Deferred();
appdata.db.transaction(function (tx) {
tx.executeSql('DROP TABLE IF EXISTS ACCOUNTS_TABLE');
}, function () {
appdata.msgs['ACCOUNTS_TABLE'] = "Could not Delete";
appdata.msgs['Operation_success'] = false;
d3.resolve();
}, function () {
appdata.msgs['ACCOUNTS_TABLE'] = "Deleted";
appdata.msgs['Operation_success'] = true;
d3.resolve();
});
var d4 = jQuery.Deferred();
appdata.db.transaction(function (tx) {
tx.executeSql('DROP TABLE IF EXISTS TRANSACTIONS_TABLE');
}, function () {
appdata.msgs['TRANSACTIONS_TABLE'] = "Could not Delete";
appdata.msgs['Operation_success'] = false;
d4.resolve();
}, function () {
appdata.msgs['TRANSACTIONS_TABLE'] = "Deleted";
appdata.msgs['Operation_success'] = true;
d4.resolve();
});
jQuery.when(d1, d2, d3, d4).done(function () {
deferred.resolve(appdata.msgs);
});
return deferred.promise();
};
最后的 HTML 是:
<md-button ng-click="appCtrl.removeDatabase();">
<i class="mdi mdi-reload"></i> Reset App
</md-button>
任何帮助表示赞赏。 谢谢你
【问题讨论】:
标签: javascript angularjs asynchronous routing ngroute