2014-01-12 41 views
0

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

我有一个从我的数据库获取所有数据,这样的功能:

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

我对pouchDB没有任何经验,但是这里有一些通用的提示可以帮助:首先检查函数是否运行。我猜这不是因为你没有定义。如果不知道为什么它没有运行,如果是的话,那么在你的情况下可能有一些东西。 –

+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是异步的。要真正理解这些暗示的含义以及代码的写法,为什么这些代码无法工作,所以我建议Google提供一些关于IndexedDB或关于异步JavaScript的教程(对不起,我没有任何关于我的顶部的好建议头)。

相关问题