函数组合早 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?

没有。你想做的是分支,这是函数组合做不到的。

你可以做的是编写函数,这些函数在提供错误路径的类型上工作,比如 MaybeEither。 (您也可以将异常视为每种类型的内置错误路径,因此只需 throw)。
哦等等,你已经在这样做了!你没有写一个简单的函数组合 compose,你写了 composeP,它使用 monadic Kleisli 组合 - 并且承诺 do 有这样一个错误路径:

function filterWords(word) {
    return word == "cantbesearched"
      ? Promise.reject(new Error("filtered for your safety"))
      : Promise.resolve(word);
}