gpt4 book ai didi

ramda.js - RamdaJS - 如何使用具有同步和异步功能的管道?

转载 作者:行者123 更新时间:2023-12-02 19:52:34 24 4
gpt4 key购买 nike

我正在尝试学习 Ramda 以及如何在日常工作中使用它。所以我有一个快速的问题。 “如何使用具有同步和异步功能的管道?”或者最好的是,我该如何改进以下代码?

const AuthService = () => ({
async signIn(credentials: Credentials): Promise<AuthSession> {
const result = await api.signIn(credentials)

return R.pipe(
signInResultToAuthSession,
saveAuthSession
)(result)
}
})

[已编辑]:我认为更好的第二种选择。

const AuthService = () => ({
async signIn(credentials: Credentials): Promise<AuthSession> {
return api.signIn(credentials).then(
R.pipe(
signInResultToAuthSession,
saveAuthSession
)
)
}
})

最佳答案

pipeWith就是为这种情况添加的。它将函数包装在一个公共(public)接口(interface)中(此处为 then)并传递结果,就像 pipe 一样。

const api = {signIn: ({pwd, ...creds}) => Promise.resolve({...creds, signedIn: true})}
const signInResultToAuthSession = (creds) => Promise.resolve({...creds, auth: true})
const saveAuthSession = (creds) => Promise.resolve({...creds, saved: true})

const AuthService = {
signIn: pipeWith(then)([
api.signIn, // [1]
signInResultToAuthSession,
saveAuthSession
])
}

AuthService.signIn({name: 'fred', pwd: 'flintstone'})
.then(console.log)

// [1]: `bind` might be necessary here, depending on the design of `api.signIn`
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.js"></script>
<script>const {pipeWith, then} = R </script>

请注意 pipeWith 将函数包装在一个数组中。有一天,我们想对 pipe 做同样的事情,但这是一个巨大的突破性变化。

关于ramda.js - RamdaJS - 如何使用具有同步和异步功能的管道?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57838698/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com