Частичное обновление документа PouchDB с помощью плагина delta-pouch с использованием AngularJS.

Я пытаюсь заставить плагин delta-pouch работать с моим PouchDB в моем приложении AngularJS.

Мой сервис данных в Angular выглядит следующим образом:

myApp.factory('DataService', ['$q', '$rootScope', 'PouchDB', function($q, $rootScope, PouchDB) {
  return {
    add: function(doc) {
      var deferred = $q.defer();
      PouchDB.post(doc, function(err, res) {
        $rootScope.$apply(function() {
          if (err) {
            deferred.reject(err)
          } else {
            deferred.resolve(res)
          }
        });
      });
      return deferred.promise;
    },

    list: function() {
      var deferred = $q.defer();
      return PouchDB.allDocs({include_docs: true, descending: true}, function(err, res) {
        $rootScope.$apply(function() {
          if (err) {
            deferred.reject(err)
          } else {
            deferred.resolve(res)
          }
        });
      });
      return deferred.promise;
    },

    update: function(obj) {
      var deferred = $q.defer();
        return PouchDB.save(obj, function(err, res) {
        $rootScope.$apply(function() {
          if (err) {
            deferred.reject(err)
          } else {
            deferred.resolve(res)
          }
        });
        });
     return deferred.promise;
    },

    get: function(id) {
        return PouchDB.get(id);
    },

    destroy: function() {
        PouchDB.destroy();
    }
  }
}]);

list и add работают нормально, но вызов save возвращает следующую ошибку. Это

Error: 'undefined' is not a constructor (evaluating 'new Promise(function (fulfill) {
    db.post(doc).then(function (doc) {
      fulfill(doc);
    });
  })')

Честно говоря, я не совсем уверен, что делаю, так как я новичок в Angular. Любая помощь будет оценена по достоинству.


person dandoen    schedule 15.08.2014    source источник


Ответы (2)


Я выпустил универсальную привязку angularjs под названием factoryng, которую вы можете использовать для включения дельта-пакета ( или ванильный мешочек) в ваш угловой код. Я думаю, что это действительно поможет вам заставить дельта-мешочек работать в вашем коде angularjs.

Кроме того, я бы рекомендовал взглянуть на пример контактов поскольку он охватывает все операции CRUD. Дайте мне знать, если у вас все еще есть проблемы.

person redgeoff    schedule 22.09.2014

Где ты это видишь? В ваших тестах Karma (например, PhantomJS)? Похоже, что Promise неправильно реализован в вашем браузере, а это значит, что вам может понадобиться использовать явную промисную оболочку, такую ​​как этот.

person nlawson    schedule 15.08.2014
comment
Просто вижу это в браузере (консоли разработчика). Скомпилированная сборка плагина: gist.github. ком/дандоен/ - person dandoen; 15.08.2014