我是函数式编程世界的新手,我正在尝试使用 Sanctuary.js 解决我的一些困惑。这是场景,我想使用管道来处理从猫鼬数据库读取,检查以确保我没有得到空值并在返回客户端之前转换以某种方式返回的数据。尝试从函数式编程的角度进行思考,似乎我应该使用 Monad 的 Just/Nothing 来处理 null 并在管道中映射来转换数据。这是一个使用数组来给出我所想的基本要点的示例:
//first scenario
const arrayList = [];
arrayList.push({
a: {
b: 1,
c: 2,
d: 3
}
})
const findData = (arrayList) => arrayList
const checkForNull = (arrItems) => arrItems === null ? S.Nothing : S.Just(arrItems)
const test = (arr) => console.log(arr)
let value = pipe([
findData,
checkForNull,
map(x => x.map(y => ({
a: {
b: y.a.b + 1,
c: y.a.c + 1,
d: y.a.d + 1
}
}))),
test
])
value(arrayList);
//2nd scenario
const findData2 = (index) => arrayList[index]
const checkForNull2 = (data) => data === null ? S.Nothing : S.Just(data)
let value2 = pipe([
findData2,
checkForNull2,
map(x => ({
a: {
b: x.a.b + 2,
c: x.a.c + 3,
d: x.a.d + 4
}
})),
test
])
value2(0);
最上面的场景模拟来自数据库的对象数组,第二个场景模拟单个对象。1) 如果我使用 Just/Nothing,那么检查 null 并返回 Just if not null 否则什么都没有的 sanctuary 方法是什么,例如 ramda-fantasy 中的 Maybe.toMaybe。2) 我在庇护文档中注意到有一个 pipeP 已被弃用。我应该如何处理管道中返回的承诺?例如,如果第一个示例中的 findData 针对上述情况返回了 Promise.resolve,那么现在应该如何处理?