javascript - rxjs 在 map Rx.Observable.range(1, 5).map 中使用 async/await

标签 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 = 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。我只是想看看这能走多远

Here's a working example

检查页面底部的控制台以获取结果。

关于javascript - rxjs 在 map Rx.Observable.range(1, 5).map 中使用 async/await,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37612570/

相关文章:

javascript - 使用 redux 有什么好处?

c# - Pubnub 执行同步请求

TypeScript Omit 和 keyof

typescript - 使用 Typescript 在 Angular 2 中获取属性

javascript - 通过javascript选择特定打印机

javascript - 第二次单击时关闭水平下拉菜单

javascript - 按住空格键时自定义 CSS 光标消失

Jquery $.ajax 异步奇怪行为

javascript - 使用 Nodejs 的多个用户输入

typescript - 在 Next.js 测试中无法从 aws-jwt-verify 库中找到模块 '#node-web-compat'