2016-04-26 10 views
0

このようにIndexedDBライブラリを呼び出すと、メソッドのオブジェクトを返す必要があります。AngularJS IndexedDB呼び出し後のメソッドのオブジェクトを返す

.factory('presentationData', ['$indexedDB', 'uuid4','$q', function ($indexedDB, uuid4, $q) { 

    var objectStore = $indexedDB.openStore('presentations', function(store) { 
    return store; 
    }); 

    return objectStore.then(function(objectStore) { 
    var functions = getDefaultDataServiceFunctions(objectStore); 

    functions.getAll = function (includeFlaggedForDelete) { 
     if (includeFlaggedForDelete) { 
     return objectStore.getAll(); 
     } 
     return objectStore.getAll().then(function (presentations) { 
     return presentations.filter(function (p) { 
      return !(p.meta && p.meta.localStatus === 'deleted'); 
     }); 
     }); 
    }; 

    functions.getWithLocalStatus = function (status) { 
     var query = $indexedDB.queryBuilder().$index('localStatus').$eq(status).compile(); 
     return objectStore.each(query); 
    }; 

    return functions; 
    }) 
}]) 

なぜメソッドのオブジェクトが返されないのですか?わかりません!! https://github.com/bramski/angular-indexedDB

ありがとう:これを使用して

+0

jsfiddleで再現できる場合は、問題の解決に役立ちます。 – 6220119

答えて

1

これは、ストアオブジェクトの返却が無効なので機能しません。ストアは閉じられ、ストア上の操作は失敗します。

あなたが実際にやろうとしていることは本当にわかりません。データを取得するだけですか?データを返す約束を返す必要があります。このサービスを利用し

.service('dataFetcher', ['$indexedDB', 'uuid4','$q', function ($indexedDB, uuid4, $q) { 
    this.getData = function() { 
    promise = $q.defer(); 
    $indexedDB.openStore('presentations', function (store) { 
     ... do what is needed to get the answer here... 
     promise.resolve(data); 
    } 
    return promise.promise; 
    } 
} 

、あなたが実際に求めて何を与えるようなもの...

.controller('MyControl', ['dataFetcher', function ($scope, dataFetcher) { 
    dataFetcher.getData().then(function (data) { 
    $scope.data = data; 
    }); 
}]; 

を行きます。 indexed-DBは、コールバックメカニズムで動作します。あなたは、それを賢明な方法でデータサービスを設計するために使用する必要があります。

関連する問題