質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

Q&A

0回答

1530閲覧

1つのtransaciton内でdeferred.promiseできる?

ttm

総合スコア6

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

AngularJS

AngularJSはオープンソースのJavaScriptフレームワークです。ブラウザ上で動作するウェブアプリケーションの開発にMVCアーキテクチャを取り入れることを目的としています。

0グッド

0クリップ

投稿2016/12/14 06:13

編集2016/12/14 08:16

###内容
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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttm

2016/12/16 02:55

ご回答ありがとうございます。transactionを分ければ順序性の担保はとれますが、1つのtransaction内で非同期処理があると、transactionの外にでてしまうようです。無理そうですかね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問