AngularJS Возвращает объект методов после вызова IndexedDB

0

Мне нужно вернуть объект методов после вызова библиотеки 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, это поможет решить вашу проблему.
Теги:
promise
angular-promise

1 ответ

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 работает на механизм обратного вызова. Вы должны использовать это, чтобы разумно разработать свою службу данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню