有没有一种方法可以将此异步功能重构为空闲状态?

时间:2018-08-22 06:00:33

标签: functional-programming ramda.js

我有这个功能:

const getData = async player => {
    const [profile, repos] = await Promise.all([
        getProfile(player),
        getRepos(player)
    ])
    return {
        profile,
        repos
    }
}

我可能不需要更改它,但我很好奇,是否有可能使用Ramda使其免费。

1 个答案:

答案 0 :(得分:1)

我认为您已经清楚地传达了意图,并且将其重构为无点可能会使事情变得混乱。

也就是说,这是一个可能看起来像的例子:

const getProfile = player => Promise.resolve('player-' + player)
const getRepos = player => Promise.resolve('repo-' + player)

const fn = R.pipeP(
  R.pipe(R.juxt([getProfile, getRepos]), Promise.all.bind(Promise)),
  R.zipObj(['profile', 'repos'])
)

fn('foo').then(console.log)
<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.min.js"></script>

这利用R.juxt创建一个函数,该函数将其参数传递给所提供的Promise产生函数数组中的每个函数,并R.pipeP与所得的Promise组成R.zipObj