Очистка подписки Angular 6 при многократном нажатии кнопки - PullRequest
0 голосов
/ 28 ноября 2018

Скажем, у меня есть кнопка «Свяжитесь с нами» с подпиской на услугу «Свяжитесь с нами», которая возвращает наблюдаемое после запуска HTTP-запроса.

Если пользователь нажимает кнопку 10 раз и отправляет 10 электронных писем (желательно), будут ли запущены 10 одновременных подписок?Если да, каков наилучший способ очистки подписки в этом сценарии?

Ответы [ 2 ]

0 голосов
/ 28 ноября 2018

Вы можете избежать отмены подписки, если добавите take(1) в канал при подписке - если вы подписываетесь несколько раз

В качестве альтернативы, у вас есть одна подписка в компоненте с кнопкой, которую вы инициализируетев ngOnInit() или в constructor.Сохраните ссылку на подписку в свойстве private contactSubscription: SubscriptionLike и вызовите contactSubscription && contactSubscription.unsubscribe в ngOnDestroy()

0 голосов
/ 28 ноября 2018

просто сохраните подписку в собственности и проверьте, существует ли она, не подписывайтесь, если нет, то подпишитесь

cacheSub: Subscription;

contactUs() {
  if(!this.cacheSub) {
     this.cacheSub = this.service.cacheSub.subscribe(....);
  }
}

РЕДАКТИРОВАТЬ

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

cacheSub: Subscription;

contactUs() {
     this.cacheSub = this.service.cacheSub.subscribe(() => {
        // some code here if you need it
        this.cacheSub.unsubscribe();
     });
}

или

contactUs() {
    this.cacheSub && this.cacheSub.unsubscribe();
    this.cacheSub = this.service.cacheSub.subscribe(() => {
            // some code here if you need it
    });
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...