2015-08-25 24 views
0

執行SQL語句我想要的SQL與下面的代碼指令順序執行列表中。但我可以看到,從下面的方法不能保證序列。什麼是正確的方法?如何依次角JS

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

嵌套thens?我認爲它太嵌套了:P尋找更乾淨的方式。所有的 –

+1

首先,我不建議直接從JavaScript(客戶端)查詢數據庫。這是非常危險的。數據庫調用和查詢必須在服務器端進行管理。 –

回答

1
var promise = $q.when(); 
angular.forEach(querylistfordeletegrp, function(query) { 
    promise = promise.then(function() { 
    return DB.query(query, [grp_id]); 
    }); 
}); 
+0

但這並沒有解決問題。序列還沒有實現 –

+0

我忘了從回調中返回。再試一次。 –

+1

工作示例(其中數據庫查詢由超時模擬)。打開您的控制檯,看看會發生什麼:http://plnkr.co/edit/MZAcQJKeVGIV561vBX0E?p=preview –

0

做一個函數executeNextQuery()和遞歸調用它裏面的則()

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