Как управлять несколькими последовательными методами подписки в Angular и RxJs? - PullRequest
0 голосов
/ 30 января 2019

Мне нужно позвонить в два вызова службы http и подписаться на них после подписки еще одного вызова службы http.Я имею в виду, что операция будет последовательной, так как два последних вызова зависят от первого.Можно ли выполнить эту операцию с помощью concatMap из RxJs?

Я решил проблему с помощью вложенной подписки.Но, я думаю, используя concatMap, это можно сделать.Во всех примерах, которые я искал, есть два вызова, которые объединены.Как составить более двух подписок и решить вопрос.

this.accountService.fetchBranchCodeLength().subscribe(
        data => {
            this.branchCodeLength = +data;


    //Now, I need to call another service to calculate 
    accountNumberLengthWithProductCode//


   this.subscribers.fetchAcoountNumberLength = 
    this.accountService.fetchAccountLengthConfiguration().subscribe(
      accountLength => {
        this.accountNumberLengthWithProductCode = 
            (+accountLength) - (+this.branchCodeLength);});


    //Another same kind of call to calculate 
    SUBGLCodeLength//


   this.subscribers.fetchSUBGLCodeLengthSub = 
     this.glAccountService.fetchSUBGlCodeLength(SUBGlCodeQueryParam)
      .subscribe(length => this.SUBGLCodeLength = 
          (+length.value) - (+this.branchCodeLength)                        
    );
  }
);

1 Ответ

0 голосов
/ 30 января 2019

Карта Concat используется, когда у вас много запросов, но когда они похожи, это означает, что они будут иметь одинаковые выходные данные и обработчик, что не ваш случай.Таким образом, вы можете использовать forkJoin , потому что между вашими вызовами нет никаких зависимостей.

Код

forkJoin(
   this.accountService.fetchBranchCodeLength(),
   this.accountService.fetchAccountLengthConfiguration(),
   this.glAccountService.fetchSUBGlCodeLength(SUBGlCodeQueryParam)
).subscribe(([data, accountLength, length]) => {
   this.branchCodeLength = +data;
   this.accountNumberLengthWithProductCode = (+accountLength) - this.branchCodeLength
   this.SUBGLCodeLength = (+length.value) - this.branchCodeLength;
});

И, кстати, вам не нужно отписываться от наблюдаемых http-вызовов, потому что они конечны (если быть точным, выдают только одно событие).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...