Hier ist der Code Beispiel:Baconjs Rückkehr nur letzten debounce Wertes
let watcher;
const streamWatcher = bacon.fromBinder(sink => {
watcher = chokidar.watch(root, {
ignored: /(^|[\/\\])\../
});
watcher.on('all', (event, path) => {
sink({
event: event,
path: path
});
return() => {
watcher.unwatch(root);
};
});
});
streamWatcher
.skipDuplicates(_.isEqual)
.map('.path')
.scan([], (a, b) => {
a.push(b);
return a;
})
.debounce(300)
.onValue(files => {
if (files.length) {
console.log('change event fired');
tinyLrSrv.changed({
body: {
files: files
}
});
}
});
Was ich versuche zu tun, verwendet chokidar einen Ordner ändern zu sehen (ein Web-Verzeichnis in der Entwicklung) dann Bacon.js
mit einzuwickeln und debounce (weil ich nicht jede Dateiänderung wissen möchte, sagen Sie mir einfach in einem Stapel) und geben Sie das Array der geänderten Dateien zurück.
Das Problem ist - das Array ist von Anfang an, so dass jedes Mal, wenn Datei ändern, es nur zum ursprünglichen Array hinzufügen.
Was ich erhalten möchte, ist das zuletzt geänderte Array von Dateien, in einem anderen Wort, jedes Mal, wenn das onValue
das Array empfängt, muss die Variable, die das Array enthält, zurückgesetzt werden.
Gibt es einen pure speck.js Weg, dies zu tun?
Ich habe dies versucht, aber die Subsequenz Daten leer zurückgeben. Ich meine den Scan, aber ich habe die DoAction nicht ausprobiert. Werde es versuchen. –
Die doAction funktioniert. Der Scan nicht (sogar das Array nach dem onValue zurückgesetzt), das ist ein interessantes Verhalten von Bacon.js –
Wenn Sie diskutieren wollen, warum ein bestimmter Ansatz (etwas basierend auf Scan?) Nicht funktioniert, auch wenn Sie es denken sollten Sie ein Problem gegen die speck.js github Codebase posten und wir werden es uns ansehen. Bitte fügen Sie ausführbaren Code ein. – raimohanska