【问题标题】:Angular & RxJS5 - Retain values from inner Observable beyond a higher order ObservableAngular & RxJS5 - 保留内部 Observable 的值超出更高阶的 Observable
【发布时间】:2017-03-03 03:46:34
【问题描述】:

我从 Angular 的 route.params 的内部 Observable 开始。

我希望能够保留参数“超出”高阶可观察 switchMap 的值,在我的情况下,它执行 http 调用。

例如:

this.data$ = this.route.params
    .switchMap(params => this.http.get('/api', { param1: params.param1, param2: params.param2 }))
    .map(([params, data]) => {
        //possible to get params AND data here? This returns undefined.
        return something
    })

switchMap之后是否可以访问params?

【问题讨论】:

    标签: angular rxjs5


    【解决方案1】:

    使用 switchMap 的 ResultSelector 参数

    根据源(外部)发射和内部 Observable 发射的值和索引在输出 Observable 上生成值的函数。传递给这个函数的参数是

    http://reactivex.io/rxjs/class/es6/Observable.js~Observable.html#instance-method-switchMap

    this.data$ = this.route.params
      .switchMap(params => this.http.get('/api', { param1: params.param1, param2: params.param2 }), 
        (params, data) => {
           return [params, data];
         })
        .map(([params, data]) => {
          //possible to get params AND data here? This returns undefined.
           return something
         })
    

    【讨论】:

    • 使用.switchMap() 结果选择器比使用.forkJoin() 更具可读性和更少混乱
    【解决方案2】:

    你可以使用 forkJoin:

    this.data$ = this.route.params
        .switchMap(params =>  
             Observable.forkJoin([
                 Observable.of(params),
                 this.http.get('/api', { param1: params.param1, param2: params.param2 })
        ])
        .map(([params, data]) => {
    
             return something
        })
    

    【讨论】:

    • 找不到更好的方法,所以用这个,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 1970-01-01
    • 2016-12-19
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    相关资源
    最近更新 更多