2016-04-26 9 views
0

Ich muss ein Objekt von Methoden zurückgeben, nachdem ich einen Aufruf an die IndexedDB-Bibliothek wie folgt vorgenommen habe.AngularJS Rückgabeobjekt von Methoden nach IndexedDB-Aufruf

.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; 
    }) 
}]) 

Warum funktioniert das nicht ein Objekt von Methoden geben? Ich verstehe nicht!!

Mit dieser: https://github.com/bramski/angular-indexedDB

Dank!

+0

Wenn Sie es in jsfiddle reproduzieren können, wird es helfen, Ihr Problem zu lösen. – 6220119

Antwort

1

Dies wird nicht funktionieren, da die Rückgabe des Geschäftsobjekts unwirksam ist. Der Laden wird geschlossen und der Betrieb wird fehlschlagen.

Es ist mir wirklich unklar, was Sie eigentlich machen wollen. Einfach die Daten holen? Sie müssen ein Versprechen zurückgeben, das die Daten zurückgibt.

.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; 
    } 
} 

Mit diesem Service geht dann so etwas wie ...

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

, die Sie geben, was Sie in der Tat suchen. indexed-DB arbeitet mit einem Callback-Mechanismus. Sie müssen das verwenden, um Ihren Datendienst sinnvoll zu gestalten.