我有一个名单列表,每个都需要从Firebase进行数据库提取。 FireStore get函数返回一个promise。
我如何在Ramda工作?我已经尝试过ComposeP / pipeP,但我需要这些才能在循环中工作。
当我进入函数式编程时,请记住我错过了一些明显的东西。
任何帮助或指示都将不胜感激。
答案 0 :(得分:4)
我不太清楚你在寻找什么,但乍一看我相信你只需要Promise.all
。这是一个简单的解决方案,可以模拟Firebase并使用Firebase调用组合Promise.all
。延迟1秒后,它应记录正确的值。
const people = {
barney: {name: 'Barney Rubble', id: 1},
betty: {name: 'Betty Rubble', id: 2},
fred: {name: 'Fred Flintstone', id: 3},
wilma: {name: 'Wilma Flintstone', id: 4}
}
const FakeFirestore = {
get: name => new Promise(r => setTimeout(_ => r(people[name]), 1000))
}
const getAll = R.compose(Promise.all.bind(Promise), R.map(FakeFirestore.get))
getAll(['betty', 'wilma']).then(R.map(console.log))

<script src="//cdnjs.cloudflare.com/ajax/libs/ramda/0.25.0/ramda.js"></script>
&#13;
但请注意,Ramda的电话在这里并不是特别重要。 getAll
也可以写成const getAll = names => Promise.all(names.map(FakeFirestore.get))
。