【问题标题】:lodash flow and multiple argumentslodash 流和多个参数
【发布时间】:2016-07-11 10:44:25
【问题描述】:

我将在 lodash 流中添加 2 个函数:

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:前一个函数返回的值(这是flow的正常行为),另一个需要:model。

但在 errorMessageBag 调用中,我使用 2 个参数启动流程。除了第一个函数的返回产品之外,如何让第二个函数可以使用第二个参数? 如您所见,问题在于流程中的第一个函数只需要一个参数。这是一种“咖喱”应该发挥作用的情况吗?请举例说明。

【问题讨论】:

  • 为什么不用(fields, model)=> mergedModelAndFormFieldss(model, normalizedFormFields(fields))这样的函数来代替_.flow()
  • @Gothdo 流程中会有更多功能步骤
  • 在调用_.flow?时你是否可以访问model如果有你可以调用const execution = _.flow(normalizedFormFields, _.partial(mergedModelAndFormFields, model))

标签: javascript functional-programming lodash partial-application


【解决方案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)
}

【讨论】:

  • 这确实有效,谢谢。您能否简要解释一下 bind / this 在这种情况下的机制?
  • bind() 方法创建一个新函数,在调用该函数时,将其this 关键字设置为提供的值,在调用新函数时在提供的任何参数之前具有给定的参数序列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多