2

У меня есть 2 функции, которые я буду добавлять в потоке lodash:lodash поток и несколько аргументов

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 
} 

Как вы можете видеть, первая функция normalizedFormFields принимает один аргумент. Второй нужен 2: значение, возвращаемое из предыдущей функции (что является нормальным поведением потока), а другое: модель.

Но в вызове errorMessageBag запускаю процесс потока с помощью 2 аргументов. Как получить второй аргумент, доступный ко второй функции в дополнение к возвращенному продукту первой функции? Как вы видите, проблема в том, что первая функция в потоке принимает и требует только один аргумент. Это какая-то ситуация, когда «карри» должны вступить в игру? Пожалуйста, проиллюстрируйте.

+0

Почему бы не использовать такую ​​функцию '(полей, модель) => mergedModelAndFormFieldss (модель, normalizedFormFields (поля))' вместо '_.flow()'? –

+0

@Gothdo будет больше шагов функций в потоке –

+1

У вас есть доступ к 'model' при вызове' _.flow? 'Если это так, вы можете вызвать' const execute = _.flow (normalizedFormFields, _.partial (mergedModelAndFormFields, модель)) ' – asenovm

ответ

1

Попробуйте это, должно работать:

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

Это действительно действительно помогает. Не могли бы вы вкратце объяснить механику bind/this в этом контексте? –

+1

Метод bind() создает новую функцию, которая при вызове имеет свое ключевое слово 'this', установленное на предоставленное значение, с заданной последовательностью аргументов, предшествующей любому, предоставленному при вызове новой функции. –