如何在 Angular JS 中顺序执行 sql 语句
How to sequentially execute sql statements in Angular JS
我正在尝试使用以下代码顺序执行 SQL 命令列表。但我可以看到下面的方法不能保证顺序。什么是正确的方法?
deletegrpquery = 'delete FROM grp where grp_id=(?)';
deleteuserassociations = 'delete FROM grp_usr where grp_id=(?)';
deleteexpensesofgrp = 'delete FROM exp where exp_grp=(?)';
deletepaidbyentries = 'delete FROM paidby where paid_exp in ( select exp_id from exp where exp_grp=(?))';
deleteapplicabletoentries = 'delete FROM applicableto where applicable_exp in ( select exp_id from exp where exp_grp=(?)';
deletesettlements = 'delete from settlements where settlement_grp=(?)';
cleanup_applicable = 'delete FROM applicableto where applicable_exp not in (select exp_id from exp)';
cleanup_paidby = 'delete FROM applicableto where applicable_exp not in (select exp_id from exp)';
querylistfordeletegrp = [deletepaidbyentries, deleteapplicabletoentries, deletesettlements, deleteuserassociations, deletegrpquery,deleteexpensesofgrp, cleanup_applicable, cleanup_paidby];
angular.forEach(querylistfordeletegrp, function(query) {
DB.query(query, [grp_id]).then(function(result) {
console.log(query);
});
})
创建一个函数 executeNextQuery() 并从 then() 内部递归调用它
var promise = $q.when();
angular.forEach(querylistfordeletegrp, function(query) {
promise = promise.then(function() {
return DB.query(query, [grp_id]);
});
});
$q.serial 以更简洁的方式帮助实现了这一目标 http://www.codeducky.org/q-serial/
deletegrpquery = 'delete FROM grp where grp_id=(?)';
deleteuserassociations = 'delete FROM grp_usr where grp_id=(?)';
deleteexpensesofgrp = 'delete FROM exp where exp_grp=(?)';
deletepaidbyentries = 'delete FROM paidby where paid_exp in ( select exp_id from exp where exp_grp=(?))';
deleteapplicabletoentries = 'delete FROM applicableto where applicable_exp in ( select exp_id from exp where exp_grp=(?))';
deletesettlements = 'delete from settlements where settlement_grp=(?)';
cleanup_applicable = 'delete FROM applicableto where applicable_exp not in (select exp_id from exp)';
cleanup_paidby = 'delete FROM paidby where paid_exp not in (select exp_id from exp)';
querylistfordeletegrp = [deletepaidbyentries, deleteapplicabletoentries, deletesettlements, deleteuserassociations, deletegrpquery, deleteexpensesofgrp, cleanup_applicable, cleanup_paidby];
// solution
var tasks = querylistfordeletegrp.map(function(query) {
return function() {
return DB.query(query, [grp_id]);
};
});
$q.serial(tasks);
我正在尝试使用以下代码顺序执行 SQL 命令列表。但我可以看到下面的方法不能保证顺序。什么是正确的方法?
deletegrpquery = 'delete FROM grp where grp_id=(?)';
deleteuserassociations = 'delete FROM grp_usr where grp_id=(?)';
deleteexpensesofgrp = 'delete FROM exp where exp_grp=(?)';
deletepaidbyentries = 'delete FROM paidby where paid_exp in ( select exp_id from exp where exp_grp=(?))';
deleteapplicabletoentries = 'delete FROM applicableto where applicable_exp in ( select exp_id from exp where exp_grp=(?)';
deletesettlements = 'delete from settlements where settlement_grp=(?)';
cleanup_applicable = 'delete FROM applicableto where applicable_exp not in (select exp_id from exp)';
cleanup_paidby = 'delete FROM applicableto where applicable_exp not in (select exp_id from exp)';
querylistfordeletegrp = [deletepaidbyentries, deleteapplicabletoentries, deletesettlements, deleteuserassociations, deletegrpquery,deleteexpensesofgrp, cleanup_applicable, cleanup_paidby];
angular.forEach(querylistfordeletegrp, function(query) {
DB.query(query, [grp_id]).then(function(result) {
console.log(query);
});
})
创建一个函数 executeNextQuery() 并从 then() 内部递归调用它
var promise = $q.when();
angular.forEach(querylistfordeletegrp, function(query) {
promise = promise.then(function() {
return DB.query(query, [grp_id]);
});
});
$q.serial 以更简洁的方式帮助实现了这一目标 http://www.codeducky.org/q-serial/
deletegrpquery = 'delete FROM grp where grp_id=(?)';
deleteuserassociations = 'delete FROM grp_usr where grp_id=(?)';
deleteexpensesofgrp = 'delete FROM exp where exp_grp=(?)';
deletepaidbyentries = 'delete FROM paidby where paid_exp in ( select exp_id from exp where exp_grp=(?))';
deleteapplicabletoentries = 'delete FROM applicableto where applicable_exp in ( select exp_id from exp where exp_grp=(?))';
deletesettlements = 'delete from settlements where settlement_grp=(?)';
cleanup_applicable = 'delete FROM applicableto where applicable_exp not in (select exp_id from exp)';
cleanup_paidby = 'delete FROM paidby where paid_exp not in (select exp_id from exp)';
querylistfordeletegrp = [deletepaidbyentries, deleteapplicabletoentries, deletesettlements, deleteuserassociations, deletegrpquery, deleteexpensesofgrp, cleanup_applicable, cleanup_paidby];
// solution
var tasks = querylistfordeletegrp.map(function(query) {
return function() {
return DB.query(query, [grp_id]);
};
});
$q.serial(tasks);