我使用 pouchDB 作为应用程序的本地数据库。我想查询 PouchDB 的结果并将其加载到 React.js 中。然而,即使我使用 waitFor() 方法,PouchDB 查询的结果返回得太晚了。我想我不明白 waitFor() 的用法是否正确,也许有人可以阐明它。
我有两个存储,一个是从数据库检索数据的 DbStore。我的反应组件使用了 FileExplorerStore 这个存储。
DbStore.dispatchToken = AppDispatcher.register(function (payload) {
var action = payload.action;
var folder = payload.action.folder
switch (action.type) {
case 'OPEN_FOLDER':
if (folder === 'start') {
DbStore.init();
}
else {
DbStore.createPath(folder);
}
DbStore.emitChange();
break;
default:
// do nothing
}
return true;
});
DbStore 有一个函数 LoadFiles,它将把数据库文件加载到 _files 数组中。为了便于说明,我复制了以下代码:
loadFiles: function (_path) {
var fileNames = fs.readdirSync(_path);
_files = [];
fileNames.forEach(function (file) {
console.log(file)
db.query(function (doc) {
emit(doc.name);
}, {key: "bower.json"}).then(function (res) {
_files.push(res.rows[0].key)
});
});
},
FileExplorerStore 有一个从 _files 数组中检索文件的方法。然后在 FileExplorerStore 中我有一个 getFiles() 方法,它将检索这些文件。但是,该数组始终为空,因为该方法将在数组被填充之前执行。
文件浏览器存储
FileExplorerStore.dispatchToken = AppDispatcher.register(function (payload) {
var action = payload.action;
switch (action.type) {
case 'OPEN_FOLDER':
AppDispatcher.waitFor([DbStore.dispatchToken]);
FileExplorerStore.emitChange();
break;
default:
// do nothing
}
return true;
});
在react.js中,getInitialState函数将从FileExplorerStore调用getFiles()函数来显示文件。
我该如何解决这个问题或以更好的方式对此进行建模?