在 Angular 中链接可观察订阅的最佳方式?

Posted

技术标签:

【中文标题】在 Angular 中链接可观察订阅的最佳方式?【英文标题】:Best way to chain observable subscriptions in Angular? 【发布时间】:2018-12-09 00:45:15 【问题描述】:

当我需要在获得另一个资源的结果后调用资源时,我总是嵌套订阅,如下所示:

this.paymentService.getPayment(this.currentUser.uid, this.code)
    .valueChanges()
    .subscribe(payment => 
        this.payment = payment;
        this.gymService.getGym(this.payment.gym)
            .valueChanges()
            .subscribe(gym => 
                this.gym = gym;
            );
    );

我正在使用 Angular v6 和 AngularFire2。

两个端点(getPayment 和 getGym)都返回对象。有没有更优雅的方法可以做到这一点,而无需将一个调用嵌套在另一个调用中?

【问题讨论】:

blog.angularindepth.com/… coryrylan.com/blog/angular-multiple-http-requests-with-rxjs 【参考方案1】:

有很多在线资源可以用来了解如何使用 rxjs 解决这种情况。

通常你最终会像这样使用switchMap

this.paymentService.getPayment(this.currentUser.uid, this.code)
.pipe(
   switchMap(payment => this.gymService.getGym(payment.gym))
)
.subscribe(
   this.gym = gym;
)

我故意跳过了valueChanges() 电话。我不知道它的作用,但它在反应式世界中听起来并不正确。

这是nice article about switchMap

【讨论】:

你应该这样做 > return this.gymService.getGym(this.payment.gym) 作业this.payment = payment;现在不是不见了吗? @Wintermute 你是对的,如果你需要在组件中付款你需要分配

以上是关于在 Angular 中链接可观察订阅的最佳方式?的主要内容,如果未能解决你的问题,请参考以下文章

Angular订阅链可观察

可观察 - 多个订阅者

订阅可观察到的Angular 8组件中的问题

Angular 2:可观察订阅未正确读取数据[重复]

submitForm 上的 Angular 2 RxJS 可观察取消订阅

Angular RxJS入门笔记 (Observable可观察对象Subscribe订阅Observer观察者Subscription对象)