Ich verwende PouchDB als lokale Datenbank für eine App. Ich möchte die Ergebnisse von PouchDB abfragen und diese in React.js laden. Obwohl ich die waitFor() -Methode verwende, kehren die Ergebnisse der PouchDB-Abfrage jedoch zu spät zurück. Ich denke, ich verstehe den Einsatz von waitFor() nicht richtig, vielleicht kann jemand Licht darauf werfen.Flux waitFor() und asynchrone Operation, wie zu modellieren.
Ich habe zwei Speicher, der DbStore, der Daten aus der Datenbank abruft. Und der FileExplorerStore dieses Speichers wird von meinen react-Komponenten 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;
});
Die DbStore hat eine Funktion, die die LoadFiles DB-Dateien in das _files Array geladen wird. Zum Zweck der Veranschaulichung habe ich den Code unten 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)
});
});
},
Die FileExplorerStor ein Verfahren hatte die Dateien aus dem _files Array abzuzurufen. 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 wird.
FileExplorerStor
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 die getInitialState Funktion werden die GetFiles() Funktion aus dem FileExplorerStor aufrufen, um die Dateien anzuzeigen.
Wie kann ich das beheben oder besser modellieren?
Danke. Es scheint, dass deine Erklärung der richtige Weg ist, dies zu modellieren. Ich habe auch das #reactjs-IRC überprüft und sie raten auch, eine Aktion in meinem Async-Abruf-Callback aufzurufen. Ich habe jedoch zu Reflux gewechselt, weil ich in Reflux meine Datenbank-API aus Aktionen aufrufen kann und nach dem Abrufen der Daten die nächste Aktion ausführen. – swennemen
@ChinKang können Sie hier pls http://StackOverflow.com/questions/32537568/flux-waitfor-specific-event –