无法将PouchDB数据存储在变量中

时间:2014-01-12 16:56:41

标签: javascript asynchronous callback indexeddb pouchdb

我不知道为什么,但由于某些原因,我无法使用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'

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

1 个答案:

答案 0 :(得分: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是异步的。为了真正理解这意味着什么,以及为什么代码,如你所写,不能工作,我建议你谷歌一些关于IndexedDB或一般异步JavaScript的教程(对不起,我没有任何好的建议在我的顶部头)。