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

时间:2018-06-29 19:24:46

标签: javascript angular typescript rxjs observable

在获取另一个资源的结果后需要调用资源时,我总是嵌套订阅,例如:

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)都返回对象。还有什么更优雅的方法可以在不将一个呼叫嵌套到另一个呼叫的情况下做到这一点?

1 个答案:

答案 0 :(得分:0)

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

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

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

我故意跳过了valueChanges()的电话。我对它的功能一无所知,但在被动世界中听起来并不正确。

这是一个nice article about swichMap,以前称为flatMap