Добавьте условие if и else в подписку в Angular - PullRequest
1 голос
/ 24 февраля 2020

есть ли способ применить, если условие в функции подписки?

this.Subscription1 = interval(1000).subscribe(x =>
  this.seconds -= 1
);

такое, что:

this.Subscription1 = interval(1000).subscribe(x =>
if(this.seconds!=0){
      this.seconds -= 1
});

Ответы [ 2 ]

2 голосов
/ 24 февраля 2020

Да, вы просто делаете это внутри тела подписки.

this.Subscription1 = interval(1000).subscribe(x => {
  if(this.seconds != 0) {
    this.seconds -= 1
  }
});

Альтернатива 1

Вы также можете воссоздать эту функцию внутри трубы.

Хорошо если this.seconds может когда-либо go вернуться выше 0 и вы хотите, чтобы ваша подписка продолжала получать значения.

this.Subscription1 = interval(1000)
  .pipe(
    // do not continue if this.seconds <= 0
    filter(() => this.seconds > 0)
    tap(() => this.seconds -= 1)
  )
  .subscribe(() => {
    // will only receive values if this.seconds > 0
    console.log(this.seconds);
  });

Альтернатива 2

И если вы хотите закрыть подписку один раз this.seconds достигает 0, используйте takeUntil. Теперь (вероятно) нет необходимости хранить ссылку на подписку.

interval(1000)
  .pipe(
    // stop the subscription once this.seconds reaches 0
    takeUntil(() => this.seconds === 0)
    tap(() => this.seconds -= 1)
  )
  .subscribe(() => {
    // will only receive values if this.seconds > 0
    // won't receive values if this.seconds goes back above 0 after reaching 0
    console.log(this.seconds);
  });

Бонусный совет

Используйте timer(0, 1000), если хотите, чтобы ваша подписка сработала немедленно

1 голос
/ 24 февраля 2020
this.Subscription1 = interval(1000).subscribe((x) =>
{
    if(this.seconds!=0){
          this.seconds -= 1
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...