【问题标题】:Returning data from a PouchDB query从 PouchDB 查询返回数据
【发布时间】:2015-09-04 22:28:04
【问题描述】:

我在从 PouchDB 查询返回数据时遇到问题。我正在尝试构建一个函数,该函数在调用时会从 PouchDB 返回特定数据。这是我的代码:

function getUserFullName() {
            var db = "userInfo";
            var pouch = new PouchDB(db);
            pouch.get("token").then(function (result) {
            console.log(result-user_real_name);
                return result.user_real_name;
            }).catch(function (error) {
                console.log(error);
            });
        }

所以会发生什么是函数返回一个未定义的。有人知道我做错了什么吗?

【问题讨论】:

  • 您是否仅在控制台中记录了结果并查看您是否真的得到了结果? console.log("pouchdb 结果", result);在返回之前。
  • 是的,我确信它正在取回数据。
  • 请发布结果对象。
  • @axtscz 你是如何运行这个函数的? pouch.get 是一个异步函数。如果您同步运行 getUserFullName,您将不会得到结果。 getUserFullName 需要回调作为参数
  • s/result-user_real_name/result.user_real_name/

标签: javascript pouchdb


【解决方案1】:

问题在于,您似乎在同步运行“getUserFullName”,但其中有一个异步函数“pouch.get”。该异步函数的返回值需要在回调或承诺中返回。

如果“pouch.get”返回一个promise,就像上面用“.then”显示的那样,你可以这样编写代码:

function getUserFullName() {
  var db = "userInfo";
  var pouch = new PouchDB(db);

  return pouch.get("token")
}

然后像这样运行它:

getUserFullName()
  .then(function(fullUserName){
    console.log(fullUserName);
  })
  .catch(function(err){
    console.log(err);
  });

让我知道这是否有效,或者如果您有任何问题。谢谢!

编辑: 看起来“pouch.get”确实返回了一个承诺。请参阅他们的docs here 中的示例。因此,此代码将起作用。

【讨论】:

  • 它有效,我遇到的问题是它仍在异步运行。依赖于结果的代码在返回值之前运行。
  • @axtscz 依赖于此结果的代码应该放在“getUserFullName”的“.then”函数中。上面写着“console.log(fullUserName)”。这将是“getUserFullName”的结果。 “getUserFullName”必须异步运行,因为它依赖于数据库查询的结果。
  • 好的,有道理。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-06
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
相关资源
最近更新 更多