0

我不知道为什么,但由于某些原因,我无法使用 PouchDB 从我的 indexedDB 获取数据并将该数据存储在变量中。

我有一个从我的数据库中获取所有数据的函数,如下所示:

load_all = function() {
  var database = new PouchDB('ProjectDB');
  var remoteCouch = false;
  database.allDocs({include_docs: true, descending: true}, function(error, doc) {
    if (error) ...
    else {
      if (doc.rows.length > 0) return doc.rows;
      else ...
    }
  });
}

var projects = load_all();
console.log(projects); // will log 'undefined'

我不知道为什么它不会,工作。

4

1 回答 1

1

看线:

      if (doc.rows.length > 0) return doc.rows;

您希望它返回的内容,doc.rows以便您console.log(projects);将其显示给您,对吗?好吧,这不会发生。该return语句将从回调函数(function(error, doc) {)返回,而不是load_all函数。如果你想得到doc.rows,你需要在回调函数中进行。像这样:

      if (doc.rows.length > 0) console.log(doc.rows);

这是必要的原因是因为 IndexedDB 是异步的。要真正理解这意味着什么以及为什么您编写的代码无法正常工作,我建议您在 Google 上获取一些关于 IndexedDB 或一般异步 JavaScript 的教程(抱歉,我没有任何好的建议)头)。

于 2014-01-13T04:23:16.710 回答