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?

questionAnswers(1)

yourAnswerToTheQuestion