2016-09-07 11 views
0

私がしようとしているのは、SQLiteデータベースを使用してキーと値のペアを格納した後、キーに基づいてそれらを取得できるstorageserviceの種類を作成することです。これを達成するために、私は次のコードを設定しました:SQLiteクエリ結果が関数から返されない

.service('StorageService', function($cordovaSQLite, $q) { 

    if(window.cordova) { 
    db = $cordovaSQLite.openDB("vouchers.db"); 
    } else { 
    db = window.openDatabase("vouchers.db", "1.0", "Vouchers db", -1); 
    } 
    $cordovaSQLite.execute(db, "CREATE TABLE IF NOT EXISTS vouchers (key text, value text)"); 

    return { 
    getItem: function(item) { 
     var query = "SELECT key, value FROM vouchers WHERE key = ?"; 
     $cordovaSQLite.execute(db,query,[item]).then(function(result) { 
     console.log(result.rows[0].value); 
     return result.rows[0].value; 
     }); 
    }, 
    setItem: function(item, data) { 
     var query = "INSERT INTO vouchers (key, value) VALUES (?,?)"; 
     return $cordovaSQLite.execute(db, query, [item, data]); 
    } 
    }; 
}) 

今、これらのほとんどは素晴らしいです。私は、DB内の項目を格納しても、あなたが次の行に見ることができるように関数の中からそれらを取得し、ログインすることができます:私はこれをログインすると、私は期待値を取得

console.log(result.rows[0].value); 

が、私はそれとログを返すときそれは私がこのサービスを使用しているコントローラでは未定義のままです。私のコントローラのコードは次のようになります:

var test = StorageService.getItem("testje"); 
console.log(test); 

コンソールエラーはありませんのでご注意ください。ちょうど2つのログ。定義されていないコントローラから一つ、そして意図したとおりの値を返すサービスから1:私は誰もがここで間違って起こっている伝えることができます願っていた

controllers.js:465 undefined 
services.js:122 dit is een testje! 

。参考になる情報やコードがある場合は、私に連絡してください。

答えて

0

あなたのgetItem: function(item) {が約束を使って結果を取得しているからです。

ではなく、このようにコードを変更してください:

getItem: function(item) { 
    var query = "SELECT key, value FROM vouchers WHERE key = ?"; 
    return $cordovaSQLite.execute(db,query,[item]); 
}); 

とあなたのサービスをこのように呼ん:

StorageService.getItem("testje").then(function(result){ 
    console.log(result); 
}); 

あなたはその結果を表示することができます。

私は約束を約束しているbasic principlesを勉強することをお勧めします。$ httpの取得要求と投稿要求、およびその他の非同期のものをjavascriptで使用すると、頻繁に遭遇します。

関連する問題