テーブル1からIDを取得し、そのIDを元にテーブル2からデータを取得する処理を作成したのですが、
WebSQLのトランザクションは非同期で同時に走ってしまうため、1つ目のテーブルのデータを取得する前に2つ目のSQLが走ってしまいます。
javascript
1function selectItemList(_no){ 2 var id = null; //tbl1から取得したデータを保持する変数 3 4 //tbl1からデータを取得 5 db.transaction( 6 function(tr){ 7 tr.executeSql( 8 "SELECT id FROM tbl1 WHERE no = ?", 9 [_no], 10 function(rt,rs){ 11 //データを変数に退避 12 id = rs.rows.item(0).id; 13 }, 14 function(){ 15 console.error("Select tbl1 error"); 16 } 17 ); 18 } 19 ); 20 21 //tb1から取得したidを元にtbl2からデータを取得したいが、 22 //両方のSQLが同時に走ってしまうためidはnullのまま... 23 db.transaction( 24 function(tr){ 25 tr.executeSql( 26 "SELECT * FROM tbl2 WHERE id = ?", 27 [id], 28 function(rt,rs){ 29 //成功した場合の処理 30 hogehoge... 31 }, 32 function(){ 33 console.error("Select tbl2 error"); 34 } 35 ); 36 } 37 ); 38} 39
jQueryにはこのような非同期処理を扱うためにdeferredメソッドが用意されているようですが、解説サイトやサンプルコードを見ても理解することができなかったので、この処理を同期処理として扱う方法を教えてください。
なお、上記のコードは実際のコードを簡略化したものなので、記述ミスがあるかもしれません。
よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/09/14 07:14
2015/09/14 15:10