我编写了以下服务,从本地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。你能帮一些代码吗?
答案 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;
});