Подписаться на несколько наблюдаемых - PullRequest
0 голосов
/ 28 августа 2018

Я хочу подписаться на несколько наблюдаемых, но вторая наблюдаемая зависит от первой. Итак, с первого раза я получаю идентификатор клиента, и мне нужно получить всю информацию из новой наблюдаемой.

this.taskService
      .get(this.$state.params.taskId)
      .pipe(
        switchMap((taskDetails: IGetTask) => this.taskService.getAgreement(taskDetails.taskParameters.customerAgreementId)),
        tap(customerAgreement => this.customerAgreement = customerAgreement)
      )
      .subscribe((data: any) => {
        this.signees = new SignatoryDetails(data);
        this.customerDetails = new CustomerDetails(data);
      });

Это мой текущий код, но я не знаю, как продолжить добавление нового наблюдателя для получения информации о клиенте. Идентификатор клиента присутствует в this.customerAgreement. Я могу получить информацию о клиенте с помощью this.customerService.getCustomer (ID).

Ответы [ 2 ]

0 голосов
/ 28 августа 2018

Вам нужно сжать ваш вход с выходом внутри switchMap:

switchMap((taskDetails: IGetTask) =>
        Observable.zip(this.taskService.getAgreement(taskDetails.taskParameters.customerAgreementId),
                        Observable.Of(taskDetails.taskParameters.customerAgreementId)))
0 голосов
/ 28 августа 2018

Почему бы просто не switchMap снова? Вам нужны и клиентское соглашение, и информация о клиенте в вашей подписке? Затем вы должны отобразить результат первой наблюдаемой на результат второй наблюдаемой, используя map.

Вот пример:

this.taskService
    .get(this.$state.params.taskId)
    .pipe(
        switchMap((taskDetails: IGetTask) => this.taskService.getAgreement(taskDetails.taskParameters.customerAgreementId)),
        tap(customerAgreement => this.customerAgreement = customerAgreement),
        switchMap(customerAgreement => this.customerService.getCustomer(customerAgreement.id).pipe(
            map(customerInformation => ({customerInformation: customerInformation, customerAgreement: customerAgreement}))))
    )
    .subscribe((data: any) => {
        let customerAgreement = data.customerAgreement;
        let customerInformation = data.customerInformation;

        this.signees = new SignatoryDetails(data);
        this.customerDetails = new CustomerDetails(data);
    });
...