如何应用一个函数,它返回一个承诺给Ramda中的每个列表项

时间:2018-03-30 14:10:05

标签: javascript functional-programming promise google-cloud-firestore ramda.js

我有一个名单列表,每个都需要从Firebase进行数据库提取。 FireStore get函数返回一个promise。

我如何在Ramda工作?我已经尝试过ComposeP / pipeP,但我需要这些才能在循环中工作。

当我进入函数式编程时,请记住我错过了一些明显的东西。

任何帮助或指示都将不胜感激。

1 个答案:

答案 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;
&#13;
&#13;

但请注意,Ramda的电话在这里并不是特别重要。 getAll也可以写成const getAll = names => Promise.all(names.map(FakeFirestore.get))