我想使用 async/await 从 rxjs 获取列表。我该怎么办?
function getData(num){
return new Promise((resolve, reject)=>{
resolve(num + 1)
})
}
async function create(){
var list = await Rx.Observable.range(1, 5).map(async (num)=>{
const data = await getData(num)
return data
}).toArray().toPromise()
return list
}
Rx.Observable.fromPromise(create()).subscribe(list=>{
console.log(list)
}, err=>{
console.log(err)
})
我明白了
[ Promise { 2 },
Promise { 3 },
Promise { 4 },
Promise { 5 },
Promise { 6 } ]
我想得到这样的数据
[2,3,4,5,6]
最佳答案
这是一个有点老的问题。您可能已经有了答案,但我认为这是一个很好的挑战,结果证明它也是一个非常简单的挑战!
只需从 map()
切换到 concatMap()
。
而且您甚至不需要映射函数中的 async
/await
位。尽管保留或删除它对我来说似乎没有任何改变。
因此,相关位可以简化为:
async function create() {
var list = await Rx.Observable.range(1, 5)
.concatMap(num => getData(num))
.toArray().toPromise();
return list;
}
同样,您可以完全按照问题中的方式保留它,只需将 map
更改为 concatMap
。我只是想看看这能走多远
检查页面底部的控制台以获取结果。
关于javascript - rxjs 在 map Rx.Observable.range(1, 5).map 中使用 async/await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37612570/