1

我正在尝试让delta-pouch 插件与我的 AngularJS 应用程序上的PouchDB设置一起使用。

我在 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 还是很陌生。任何帮助,将不胜感激。

4

2 回答 2

0

你在哪里看到这个?在您的 Karma 测试中(即 PhantomJS)?看起来Promise您的浏览器中没有正确实现,这意味着您可能需要使用像这样的显式 Promise shim 。

于 2014-08-15T18:22:27.763 回答
0

我发布了一个名为factoryng的一体化 angularjs 绑定,您可以使用它来将 delta pouch(或 vanilla pouch)合并到您的 Angular 代码中。我认为它真的会帮助你让 delta pouch 在你的 angularjs 代码中工作。

另外,我建议看一下Contacts 示例,因为它涵盖了所有 CRUD 操作。如果您仍有问题,请告诉我。

于 2014-09-22T02:57:56.690 回答