2

Ich habe 2 Funktionen, die ich in einem lodash Fluss hinzufügen wird:lodash Fluss und mehrere Argumente

function normalizedFormFields(fields) { // needs only 1 argument 
    return _.mapValues(fields, function(value) { 
     return { 'content': value }; 
    }); 
} 

function mergedModelAndFormFieldss(model, normalizedFormFields) { 
    return _.merge({}, model, normalizedFormFields) 
} 

const execution = _.flow(normalizedFormFields, mergedModelAndFormFieldss) 

const errorMessageBag = function(fields, model) { 
    return execution(fields, model) // initiate flow with 2 arguments 
} 

Wie Sie die erste Funktion normalizedFormFields ein Argument sehen kann. Die zweite benötigt 2: den von der vorherigen Funktion zurückgegebenen Wert (was das normale Verhalten des Flusses ist) und einen anderen: Modell.

Aber im Aufruf errorMessageBag starte ich den Ablaufprozess mit 2 Argumenten. Wie kann das zweite Argument neben dem zurückgegebenen Produkt der ersten Funktion der zweiten Funktion zur Verfügung stehen? Wie Sie sehen, das Problem besteht darin, dass die erste Funktion im Ablauf braucht und nur ein Argument benötigt. Ist das eine Art von Situation, in der "Curry" ins Spiel kommen sollte? Bitte illustrieren.

+0

Warum nicht verwenden, um eine Funktion wie '(Felder, Modell) => mergedModelAndFormFieldss (Modell, normalizedFormFields (Felder))' statt '_.flow()'? –

+0

@Gothdo gibt es mehr Funktionen Schritte im Fluss –

+1

Haben Sie Zugriff auf 'Modell' beim Aufruf von' _.flow? 'Wenn ja, können Sie' const ausführen = _.flow (normalizedFormFields, _.partial (mergedModelAndFormFields, Modell)) ' – asenovm

Antwort

1

die Sie interessieren, sollte funktionieren:

function normalizedFormFields(fields) { 
    return _.mapValues(fields, function(value) { 
     return { 'content': value }; 
    }); 
} 

function mergedModelAndFormFieldss(model, normalizedFormFields) { 
    return _.merge({}, model, normalizedFormFields) 
} 

const errorMessageBag = function(fields, model) { 
    return _.flow(
     normalizedFormFields, 
     mergedModelAndFormFieldss.bind(this, model) 
    )(fields) 
} 
+0

Das funktioniert in der Tat danke. Könntest du bitte kurz die Mechanik von bind erklären/dies in diesem Zusammenhang? –

+1

Die bind() -Methode erstellt eine neue Funktion, die bei ihrem Aufruf das Schlüsselwort 'this' auf den angegebenen Wert setzt, wobei eine bestimmte Argumentfolge vor dem Aufruf der neuen Funktion steht. –