Как последовательно выполнить SQL-операторы в Angular JS

0

Я пытаюсь выполнить список команд 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);
  });
})
  • 0
    Я не знаю много JS, но мне кажется , что вы должны ждать запрос до конца, а затем выполнить следующую в его then обратном вызове. И так далее. Там могут быть библиотеки для облегчения этой вещи.
  • 0
    вложенные потом? я думаю, что это слишком гнездится: P ищет более чистый путь.
Показать ещё 3 комментария
Теги:
foreach

3 ответа

1
Лучший ответ
var promise = $q.when();
angular.forEach(querylistfordeletegrp, function(query) {
  promise = promise.then(function() {
    return DB.query(query, [grp_id]);
  });
});
  • 0
    Но это не решило проблему. последовательность еще не достигнута
  • 0
    Я забыл вернуться с обратного вызова. Попробуйте еще раз с возвратом.
Показать ещё 1 комментарий
0

$ 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);
0

Сделайте функцию executeNextQuery() и вызовите ее рекурсивно изнутри then()

Ещё вопросы

Сообщество Overcoder
Наверх
Меню