Лучший способ связать наблюдаемые подписки в Angular? - PullRequest
0 голосов
/ 29 июня 2018

У меня всегда есть вложенные подписки, когда мне нужно вызвать ресурс после получения результата другого, например:

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 голосов
/ 29 июня 2018

В Интернете доступно множество ресурсов, позволяющих понять, как с помощью rxjs можно решать такие сценарии.

Обычно вы в конечном итоге используете switchMap, как это

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

Я специально пропустил звонок valueChanges(). Я не имею ни малейшего представления о том, что он делает, но в реактивном мире это звучит не совсем правильно.

Это хорошая статья о swichMap, ранее известном как flatMap.

...