###内容
AngularJS,HTML5でwebアプリを作っていて、
websqlの1つのtransaction内で同期処理をしたかったのですが、
transaction内でdeferred,promiseを使うと
以下のエラーが発生してしまいます。
そもそも1つのtransaciton内でdeferred.promiseは使えないの?
実現可能なのか、可能であれば実現方法をお願いします。
やりたいことのイメージは、websqlの1つのtaransaction内で
transaction{
create table
↓
insert
↓
select
↓
selectの結果からajax通信
↓
ajax通信が成功
↓
ajaxの結果からupdate
}
###発生している問題・エラーメッセージ
エラーメッセージ ”Error: Failed to execute 'executeSql' on 'SQLTransaction': SQL execution is disallowed.”
###該当のソースコード
websqlServ._db.transaction( function (trans) { //create table ・・・ // insert ・・・ //select var funcSelect = function() { trans.executeSql("SELECT * FROM TEST_TABLE", [], function (rt, rs) { console.info("SELECT成功2"); //select結果(AjaxURL取得) var d = rs.rows.item(0); var testUrl = d.value //Ajax通信 $http({ method: 'GET', url: testUrl, headers: { 'Content-Type': 'application/json' } }).then(funcInsert ,errCallback) // ↑Ajax通信successCallback(DROP TABLE) }, function (e) { console.info("SELECT失敗:" + e); } } // insert var funcInsert = function(data) { console.info("Ajax通信成功"); //画面表示用 viewModel.res = data; trans.executeSql("update TEST_TABLE set value='" + data.value + "' where key='" + data.key + "'""", [], function () { console.info("UPDATE成功"); }, function (e) { console.info("UPDATE失敗:" + e); }) } });
###実現したいこと
トランザクションを分ければ実現可能ですが、
1つのトランザクション内でdeferred,promiseで順序性の担保をとりたい。
###補足情報(言語/FW/ツール等のバージョンなど)
AngularJs,HTML5,WebSql,Ajax,$http,$q,deferred,promise
あなたの回答
tips
プレビュー