PouchDB:返回query()结果对象

时间:2016-02-10 16:31:00

标签: javascript database function object pouchdb

所以我有这个工作的PouchDB查询,它将结果输出到控制台:

getActiveProjects();

function getActiveProjects() {
    function map_allActivePrj(doc) {emit(doc.projectStatus);}

    db.query(map_allActivePrj, {
        key          : '1',
        include_docs : true
    }).then(function (result) {
        // handle result
        console.log(JSON.stringify(result.rows, null, 4));          
    }).catch(function (err) {
        // handle errors
    });
}

现在我想从另一个函数调用此函数并返回结果。我无法做到这一点。我知道结果在查询范围内。

投入"返回"在" db.query"前面如果我用以下内容打印出来,则返回一个空对象:

console.log(JSON.stringify(getActiveProjects()));

我不确定这个功能是否是一个好主意。我是否应该在" //处理结果"中编写代码?部?

1 个答案:

答案 0 :(得分:2)

您无法从异步函数返回同步值。相反,您可以使用回调:

function getActiveProjects(cb) {
  ...
  }).then(function(result) {
    // do stuff
    cb(result);
  }).catch(...
}

getActiveProjects(function(result) {
  console.log(JSON.stringify(result));
});

或者返回一个promise并使用它来检索值:

function getActiveProjects() {
  ...
  return db.query(map_allActivePrj, {
    key: '1',
    include_docs: true
  }).then(function(result) {
    // do stuff
    return Promise.resolve(result);
  }).catch( ...
}

getActiveProjects().then(function(result) {
  console.log(JSON.stringify(result));
});