函数组合早 return
Function composition early return
我正在编写一系列函数,但我想知道首先实现我想要的功能的最佳方法是什么,这就是我的编写方式:
const composeP = (...fns) => fns.reduce((f, g) => async (...args) => f(await g(...args)))
const profileSummary = profileData => composeP(createProfileSummary, getMKAProfile)(profileData)
现在我想要做的是检查我输入的 profileData 是否是某个字符串,例如"cantbesearched" 我想立即 return 一个值到 "profileSummary" 变量而不是执行以前的函数...
那么是否可以创建一个"filterWords"函数,像这样把它放在组合前面:
const profileSummary = profileData => composeP(createProfileSummary, getMKAProfile, filterWords)(profileData)
如果检测到某些单词,则跳过左侧的先前函数,然后 return 一个值。
Is it possible to create a "filterWords" function to be put it in front of the composition?
没有。你想做的是分支,这是函数组合做不到的。
你可以做的是编写函数,这些函数在提供错误路径的类型上工作,比如 Maybe
或 Either
。 (您也可以将异常视为每种类型的内置错误路径,因此只需 throw
)。
哦等等,你已经在这样做了!你没有写一个简单的函数组合 compose
,你写了 composeP
,它使用 monadic Kleisli 组合 - 并且承诺 do 有这样一个错误路径:
function filterWords(word) {
return word == "cantbesearched"
? Promise.reject(new Error("filtered for your safety"))
: Promise.resolve(word);
}
我正在编写一系列函数,但我想知道首先实现我想要的功能的最佳方法是什么,这就是我的编写方式:
const composeP = (...fns) => fns.reduce((f, g) => async (...args) => f(await g(...args)))
const profileSummary = profileData => composeP(createProfileSummary, getMKAProfile)(profileData)
现在我想要做的是检查我输入的 profileData 是否是某个字符串,例如"cantbesearched" 我想立即 return 一个值到 "profileSummary" 变量而不是执行以前的函数...
那么是否可以创建一个"filterWords"函数,像这样把它放在组合前面:
const profileSummary = profileData => composeP(createProfileSummary, getMKAProfile, filterWords)(profileData)
如果检测到某些单词,则跳过左侧的先前函数,然后 return 一个值。
Is it possible to create a "filterWords" function to be put it in front of the composition?
没有。你想做的是分支,这是函数组合做不到的。
你可以做的是编写函数,这些函数在提供错误路径的类型上工作,比如 Maybe
或 Either
。 (您也可以将异常视为每种类型的内置错误路径,因此只需 throw
)。
哦等等,你已经在这样做了!你没有写一个简单的函数组合 compose
,你写了 composeP
,它使用 monadic Kleisli 组合 - 并且承诺 do 有这样一个错误路径:
function filterWords(word) {
return word == "cantbesearched"
? Promise.reject(new Error("filtered for your safety"))
: Promise.resolve(word);
}