Мне нужно вернуть объект методов после вызова библиотеки 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
Благодарю!
Это не будет работать, поскольку возврат объекта магазина неэффективен. Магазин будет закрыт, а операции с ним не удастся.
Мне действительно непонятно, что вы на самом деле пытаетесь сделать. Просто получите данные? Вам нужно вернуть обещание, которое вернет данные.
.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 работает на механизм обратного вызова. Вы должны использовать это, чтобы разумно разработать свою службу данных.