AngularJS工厂承诺和PouchDB

时间:2016-09-22 10:51:02

标签: javascript angularjs promise pouchdb

我编写了以下服务,从本地json文件中获取数据:

healthSystemService.factory('HealthSystemData', ['$resource',
function($resource) {
  return $resource('scripts/data/health-system/data.json', {}, {
    get: {
      method: 'GET',
      isArray: true
    }
  });
}
]);

然后我在我的控制器中使用此服务:

$scope.healthSystems = HealthSystemData.get();

现在,我知道如何从pouchDB数据库中获取相同的数据:

var db = new PouchDB('healthsystems');

db.get('healthsystems_list').then(function(doc) {
    return doc.list;
});

正如你所看到的,这是我用.then解决的承诺

我的问题是当我尝试在工厂中替换我的硬编码数据时

'scripts/data/health-system/data.json'

使用来自couchDB的数据。我想要做的是:

healthSystemService.factory('HealthSystemData', ['$resource',
function($resource) {
  return $resource(***DATA FROM THE COUCHDB(a promise)***, {}, {
    get: {
      method: 'GET',
      isArray: true
    }
  });
}

我不太明白如何在服务工厂中使用promises。你能帮一些代码吗?

1 个答案:

答案 0 :(得分:0)

AngularJS资源中包含一些棘手的问题,使您可以在不处理内部承诺的情况下使用它们,但是大多数承诺都不是这样。

因此,在您的情况下,您应该让服务返回承诺:

healthSystemService.factory('HealthSystemData', ['$q',
    function($q) {
        var db = new PouchDB('healthsystems');

        // use $q.resolve to wrap the PouchDB promise in an Angular promise
        return $q.resolve(db.get('healthsystems_list')).then(function(doc) {
            return doc.list;
        });
    }
]);

然后在控制器中使用.then()来获取数据:

HealthySystemData.then(function (data) {
    $scope.healthSystems = data;
});