0
我是用SQLite創建一個Ionic 2應用程序。我已經能夠執行命令,創建表並在成功的情況下在數據庫上插入記錄。現在我試圖插入一些父記錄和詳細記錄,並且我希望在事務內部這樣做,以便在插入子記錄時發生任何錯誤時,我不會有破損的父記錄。如何使用Ionic 2和SQLite的事務和從屬記錄?
那麼,根據這個鏈接(https://github.com/litehelpers/Cordova-sqlite-storage),我可以通過以下方式使用事務:
db.transaction(function(tx) {
tx.executeSql("Insert into ParentTable(ParentName) values ('name')");
tx.executeSql("Insert into ChildTable(ParentID, ChildName) values (0, 'value1')");
}, function(error) {
console.log('Transaction ERROR: ' + error.message);
}, function() {
console.log('Transaction OK');
});
的問題是,我需要從第一插入得到PARENTID在第二次使用插。 insertSQL命令有一個回調,所以我寫下面的代碼:
db.transaction(function(tx)
{
tx.executeSql("Insert into ParentTable(ParentName) values ('name')",
function(tx, rs)
{
/* Location 1 */
var parentID = rs.insertId;
tx.executeSql("Insert into ChildTable(ParentID, ChildName) values (?, 'value1')", [parentID]);
});
/* Location 2 */
}, function(error) {
console.log('Transaction ERROR: ' + error.message);
}, function() {
console.log('Transaction OK');
});
所以,這是我的疑問。由於executeSql是異步的,位置2將在位置1之前執行。 問題是:事務在位置2之後完成,db.transaction
超出範圍嗎? 如果是,位置1將在事務完成後執行,那麼如何在事務內部執行它?
如果否,它將在何時提交或回滾?
也請接受答案。讓我知道你是否仍然對如何寫承諾感到困惑。 – enRaiser