Ich verwende vinyl-fs
, um eine einfache Pipeline zu schreiben, die Markdown-Dateien lädt, konvertiert sie in HTML und speichert sie auf der Festplatte. Das funktioniert alles.Running-Funktion einmal in Knoten Stream-Pipeline-Kette
Allerdings in der Mitte meiner pipe()
Kette möchte ich eine asynchrone Aufgabe durchführen, die nur einmal für alle meine Dateien durchgeführt werden sollte. Mein derzeitiges Problem bezieht sich auf das Laden einer Datei (und es ist wichtig, dass die Datei in der Mitte der Kette geladen wird), aber es ist ein Problem, bei dem ich ständig stolpere.
Um dieses Problem zu lösen, habe ich begonnen, dies zu tun:
vfs.src(*.md).pipe(function() {
var loaded = false;
return through2.obj(function(file, enc, cb) {
if(!loaded) {
fs.readFile('myfile', function(err, data) {
// use data for something
loaded = true;
cb(null, file);
}
} else {
// passthrough
cb(null, file);
}
});
}
Das fühlt sich ein bisschen dumm. Komme ich das alles falsch an, oder ist das eigentlich eine gute Sache?
sagen, es scheint ok aber Sie müssen global "loaded" deklarieren oder es wird nie funktionieren. – Shanoor
Danke. Wäre es möglich, pause() und resume() zu verwenden, anstatt die Funktion through2.obj und den booleschen Zähler zu verwenden? – Ronze
Ehrlich gesagt, ich weiß es nicht. – Shanoor