pouchDB allDocs返回undefined

时间:2016-03-03 20:04:10

标签: javascript pouchdb

我想从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);
                  });
          };


...
}]);

2 个答案:

答案 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'});
      };
.....
}]);