Flux waitFor () und asynchrone Operation, wie modelliert man.

Ich verwende pouchDB als lokale Datenbank für eine App. Ich möchte die Ergebnisse aus PouchDB abfragen und in React.js laden. Obwohl ich die waitFor () -Methode verwende, werden die Ergebnisse der PouchDB-Abfrage jedoch zu spät zurückgegeben. Ich glaube, ich verstehe die Verwendung von waitFor () nicht richtig. Vielleicht kann jemand Licht ins Dunkel bringen.

Ich habe zwei Stores, den DbStore, der Daten aus der Datenbank abruft. Und der FileExplorerStore dieses Speichers wird von meinen Reaktionskomponenten verwendet.

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;
});

The DbStore hat eine Funktion LoadFiles, die die DB-Dateien in das Array _files lädt. Zur Veranschaulichung habe ich den folgenden Code kopiert:

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)
                });
            });

 }, 

Der FileExplorerStore verfügte über eine Methode zum Abrufen der Dateien aus dem Array _files. Dann habe ich im FileExplorerStore eine getFiles () -Methode, die diese Dateien abruft. Dieses Array ist jedoch immer leer, da diese Methode ausgeführt wird, bevor das Array gefüllt ist.

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;
});

In react.js ruft die Funktion getInitialState die Funktion getFiles () aus dem FileExplorerStore auf, um die Dateien anzuzeigen.

Wie kann ich das beheben oder besser modellieren?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage