Angularjsでの同期処理に関して教えてください。
今開発を行っている中で、データ取得後に処理を続行するということが実現したいです。
しかし、調査した中で「$q」などを使用しても変数に値は返ってきませんでした。
//////////////////////////////
//データ取得関数本体
//////////////////////////////
SELECT_PRODUCTM: function(where, key) {
// Promise準備
var d = $q.defer();
// 戻り値初期化
var retdata = [];
db = window.openDatabase(DBName, version, DBName, 1048576); // WebSQL実行 db.transaction( function(tx) { // データ登録 tx.executeSql('SELECT * FROM PRODUCTM WHERE 1 == 1 ' + where, key, function(tx, res) { // 取得結果があれば if (res.rows.length > 0) { // 取得結果セット for (var i = 0; i < res.rows.length; i = i + 1) { // 配列に追加していく retdata.push({categoryId: String(res.rows.item(i).kataCd).trim(), productId: String(res.rows.item(i).productCd).trim(), name: String(res.rows.item(i).productName).trim()}); } // Promise戻り値 d.resolve(retdata); } }, this.SqlExecError ); }, this.SqlExecError ); // Promiseオブジェクトを返す return d.promise; }
//////////////////////////////
// 呼び出し元
//////////////////////////////
var products = dbSvc.SELECT_PRODUCTM('', []).then(function(obj) { return obj; });
console.log(products); ←ここで結果配列が入っていてほしいです。
これだけでなくいろいろ試しましたが、ログには「[](空配列)」が入ってしまいます。
無理矢理何秒か待つなどすれば入るのですが。。。
また$q.thenはあまり使用したくないです。then内に書いた処理でさらに取得したいデータがある場合にどんどんコールバックが増えていく気がするからです。
基本的なことで実は不可能なことかもしれませんが宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/06/24 09:53