我想从db获取前缀为us ::的用户文档。
当我运行下面的代码时,我将$ scope.userList视为未定义。
当我在服务中console.log
时,我看到了对象数组。
如何返回数据?
$scope.usersList = $pouchDB.getAllDocs('us::');
.service("$pouchDB", ["$rootScope", "$q", function($rootScope, $q) {
.........
this.getAllDocs= function(field){
database.allDocs({
include_docs: true,
attachments: true,
startkey: field,
endkey: field && '\uffff'
}).then(function (result) {
console.log(result);
return result;
}).catch(function (err) {
console.log(err);
});
};
...
}]);
答案 0 :(得分:1)
这是异步代码与同步代码的问题。您不能编写return
result
的函数,因为allDocs()
是异步的(基于承诺)。
我建议您阅读async code guide以巩固您的理解。在Angular的情况下,您可能希望了解指南如何告诉您使用$http
服务,该服务也是异步和基于承诺的。即想象一下,PouchDB是一个向您发送数据的远程HTTP服务器,然后围绕它构建您的应用程序。
我有一个使用PouchDB的开源Angular应用程序;在我的情况下,我使用了Angular服务。您可以查看代码以获得灵感:pouchService.js。
答案 1 :(得分:0)
@nlawson评论引导我回答,我研究了很多关于承诺的帖子,这对我有用。
非常感谢任何改进我的编码的反馈!
在我的控制器中:
if ($stateParams.documentId) {
$scope.inputForm = {};
$scope.usersList = [];
$pouchDB.get($stateParams.documentId).then(function (result) {
result.woDate = new Date(result.woDate);
$scope.inputForm = result;
$scope.inputForm.prId = $stateParams.prId;
return $pouchDB.getAllDocs('us::');
}).then(function(udata){
$scope.usersList = udata.rows;
}).catch(function (err) {
//do something with err
});
}
我的服务是
.service("$pouchDB", ["$rootScope", "$q", function($rootScope, $q) {
.....
this.getAllDocs = function(field){
var data;
return database.allDocs({
include_docs: true,
attachments: true,
startkey: field,
endkey: field && '\uffff'});
};
.....
}]);