Ich habe angefangen, Ramda / Folktale anzuschauen. Ich habe ein Problem, wenn ich versuche, ein Array von Aufgaben aus einem Verzeichnis abzubilden. Ich versuche Dateiinhalte zu analysieren.
%Vor%Ich lese die Dateien in einem Verzeichnis und gebe eine Aufgabe zurück. Wenn dies behoben wird, sollte es in die readFile-Funktion (die eine neue Aufgabe zurückgibt) gehen. Sobald es die Datei liest, möchte ich, dass es nur ein paar Bits ausgibt.
Mit den folgenden:
%Vor%Es kommt in die readFile-Funktion, aber "Datei" ist ein Array von Dateien, so dass es Fehler gibt.
Mit:
%Vor%Wir kommen nie in fs.readfile (), aber "file" ist der eigentliche Dateiname.
Ich bin ziemlich ratlos und die Dokumentation ist verwirrend. Irgendwelche Vorschläge willkommen.
Danke
Ich habe jede der Transformationen in einer separaten Zeile geschrieben, damit ich Typensignaturen hinzufügen kann, die die verschachtelten Maps leichter verständlich machen. Diese könnten natürlich über R.pipe
zu einer Pipeline kombiniert werden.
Die interessantesten Schritte bestehen darin, R.sequence
zu verwenden, um Array (Task String)
in Task (Array String)
zu transformieren und R.unnest
, um Task (Task (Array String))
in Task (Array String)
zu transformieren.
Ich schlage vor, sich das plaid / async-Problem anzuschauen, falls Sie das noch nicht getan haben.
Wie David vorgeschlagen hat, ist commute
nützlich, um eine Liste einiger Anwendungen (z. B. Task
) in eine einzige Anwendung zu konvertieren, die die Werteliste enthält.
var app = compose(chain(map(readFile)), readDirectories);
Wir kommen nie in fs.readfile (), aber "file" ist der eigentliche Dateiname.
Die eng verwandte commuteMap
kann auch hier helfen, da sie sich um den separaten map
-Schritt kümmert Der obige Code sollte auch wie folgt dargestellt werden können:
Ich hatte ein ähnliches Problem beim Lesen aller Dateien in einem Verzeichnis und begann mit pipeP von ramda:
%Vor% Promise.all scheint beim Lesen der Dateien erforderlich zu sein, da pipeP einen Wert oder ein Versprechen erwartet, aber eine Reihe von Versprechen erhält, die Dateien zu lesen. Was mich verwirrt ist, warum ich eine Funktion machen musste, um das Promise.all
zurückzugeben, anstatt es einzubinden.
Ihre Verwendung von task / fork ist faszinierend, da die Fehlerbehandlung eingebaut ist. Möchte pipeP einen catch-Block haben, weil ohne es vielleicht zu injizieren, was für einen Anfänger wie mich schwer ist, das richtig zu machen. p>
Tags und Links javascript functional-programming ramda.js fantasyland folktale