Javascript rxjs在map Rx.Observable.range(1,5.map)中使用异步/等待
我想使用async/await从rxjs获得一个列表。我该怎么办Javascript rxjs在map Rx.Observable.range(1,5.map)中使用异步/等待,javascript,asynchronous,typescript,async-await,rxjs,Javascript,Asynchronous,Typescript,Async Await,Rxjs,我想使用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
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
/wait
位。虽然保留或删除它对我来说似乎没有任何改变
因此,相关比特可以简化为:
async function create() {
var list = await Rx.Observable.range(1, 5)
.concatMap(num => getData(num))
.toArray().toPromise();
return list;
}
同样,您可以保持问题中的状态,只需将map
更改为concatMap
。我只是想看看这能走多远
检查页面底部的控制台查看结果。我想你想要
承诺。所有(…)
而不是…toPromise()
你能检查一下这个flatMap
没有遵守秩序吗,看看这个失败的例子@Akuukis你知道为什么吗?@jayarjo要保留秩序使用concatMap()
FYIflatMap
已重命名为mergeMap
,并标记为已弃用。资料来源: