Получить наблюдаемое значение без явной подписки - PullRequest
0 голосов
/ 03 августа 2020

У меня есть этот фрагмент кода:

this.accounts$ = this.service
  .getAccounts('123Id456')
  .pipe(
    pluck('body'),
  );

this.accounts$.subscribe(accounts => 
  processAccounts(accounts);
);

Мне нужно присвоение this.accounts$, чтобы оставаться отписанным, потому что он используется в шаблоне с каналом async с ngFor l oop.

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

Вышеупомянутое работает, но мне было интересно, есть ли лучший таким образом, что мне не нужно явно подписываться на accounts$, как показано во втором заявлении.

Я попытался добавить tap(accounts => processAccounts(accounts)) после pluck('body'),, но IDE жаловалась, а также от того, что я знать tap предназначен в основном для целей отладки.

Есть ли способ присоединить processAccounts(accounts) к первому оператору?

1 Ответ

1 голос
/ 03 августа 2020

Оператор tap выполняет побочные эффекты. Вы можете думать об этом как об операторе map, который не влияет на уведомление. Но в вашем случае вы могли бы использовать оператор map для вызова функции и возврата свойства из уведомления об объекте. Фактически, оператор pluck также является формой оператора map, который возвращает только одно свойство c, а внутренне использует оператор map.

Попробуйте следующее

this.accounts$ = this.service
  .getAccounts('123Id456')
  .pipe(
    map(res => {
      const accounts = res.body;
      processAccounts(accounts);
      return accounts;
    }),
  );

Теперь триггер async должен вызывать функцию processAccounts(). Хотя обычно функции являются методами-членами, вы имели в виду this.processAccounts(), а не просто processAccounts()?

...