Fluxo waitFor () e operação assíncrona, como modelar.
Estou usando pouchDB como um banco de dados local para um aplicativo. Desejo consultar os resultados do PouchDB e carregá-lo no React.js. No entanto, mesmo usando o método waitFor (), os resultados da consulta do PouchDB retornam tarde demais. Acho que não entendo o uso de waitFor () correto, talvez alguém possa esclarecer isso.
Eu tenho duas lojas, o DbStore que recupera dados do banco de dados. E o FileExplorerStore nesta loja é usado pelos meus componentes de reação.
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;
});
O DbStore possui uma função LoadFiles que carregará os arquivos de banco de dados na matriz _files. Para fins ilustrativos, copiei o código abaixo:
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)
});
});
},
O FileExplorerStore tinha um método para recuperar os arquivos da matriz _files. Em seguida, no FileExplorerStore, tenho um método getFiles (), que recuperará esses arquivos. No entanto, essa matriz está sempre vazia porque esse método será executado antes que a matriz seja preenchida.
FileExplorerStore
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;
});
No react.js, a função getInitialState chama a função getFiles () do FileExplorerStore para exibir os arquivos.
Como posso corrigir isso ou modelar isso de uma maneira melhor?