Ich lerne gerade highland.js, nachdem ich von NoFlo.js inspiriert wurde. Ich möchte Streams rekursiv betreiben können. In diesem konstruierten Beispiel werde ich eine Zahl liefern, die mit 2 multipliziert wird, und wir filtern Ergebnisse & lt; = 512. Sobald die Zahl multipliziert ist, wird sie in das System zurückgeführt. Der Code, den ich habe funktioniert, aber wenn ich die Doto-Funktion in der Pipeline nehme, verarbeitet es keine Zahlen. Ich vermute, dass ich die Daten falsch in die returnPipe zurücksende. Gibt es eine bessere Möglichkeit, Daten zurück in ein System zu leiten? Was vermisse ich?
%Vor% Aus der Dokumentation: doto
spinnt einen Stream aus, während den Quelldatenstrom erneut ausgibt . Dies bedeutet, dass es in Bezug auf die Pipeline eine Funktion gibt, die den Stream immer noch durchleitet. Wenn Sie doto
out verwenden, wird der ursprüngliche Stream bei der nächsten Iteration nicht durch den Rückgabe-Stream zurückgeleitet.
Wenn Sie eine Pipeline verwenden möchten, müssen Sie ihr eine Methode übergeben, die einen Stream akzeptiert und einen Stream ausgibt. Zum Beispiel könnten Sie die Methode doto
im Aufruf von H.map((v)=>{console.log(v); return v;})
durch etwas wie H.pipeline
ersetzen, und da diese Methode einen Stream verbraucht und einen Stream ausgibt , wird sie weiter fließen, wenn Stream wird in .pipe(returnPipe)
EDIT: Um deine Frage zu beantworten, wenn du let input = H([1])
deklarierst, erstellst du gerade einen Stream. Sie können alle Verweise auf die Pipeline und returnPipe entfernen und dieselbe Ausgabe mit dem folgenden Code erzeugen:
Meine ursprüngliche Absicht war, einen rekursiven Dateireader in highland.js zu schreiben. Ich habe zur highland.js github issues-Liste geposted und Victor Vu hat mir geholfen, dies zusammen mit einer fantastischen Zuschreibung zusammenzustellen .
%Vor%Tags und Links node.js highland.js