Angular / RxJs Когда я должен отписаться от подписки

Да, перечислите «утечку» их переменных в Python 2.x, как и для циклов.

В ретроспективе это было признано ошибкой, и ее избегали с помощью выражений генератора. EDIT: как Мэтт Б. отмечает , его также избегали, когда синтаксисы синтаксиса и синтаксиса слова были переданы из Python 3.

Поведение списков List должно было быть оставлено, как и в Python 2, но он полностью исправлен в Python 3.

Это означает, что во всех:

list(x for x in a if x>32)
set(x//4 for x in a if x>32)         # just another generator exp.
dict((x, x//16) for x in a if x>32)  # yet another generator exp.
{x//4 for x in a if x>32}            # 2.7+ syntax
{x: x//16 for x in a if x>32}        # 2.7+ syntax

x всегда является локальным для выражения, а они:

[x for x in a if x>32]
set([x//4 for x in a if x>32])         # just another list comp.
dict([(x, x//16) for x in a if x>32])  # yet another list comp.

в Python 2.x все протекают переменную x в окружающую область.


UPDATE для Python 3.8 (?): PEP 572 ] представит оператор присваивания :=, который намеренно просачивается из понятий и выражений генератора! Это мотивировано, по существу, двумя вариантами использования: захват «свидетеля» из функций раннего завершения, таких как any() и all():

if any((comment := line).startswith('#') for line in lines):
    print("First comment:", comment)
else:
    print("There are no comments")

и обновление изменчивого состояния:

total = 0
partial_sums = [total := total + v for v in values]

Для точного определения области обзора см. Приложение B . Переменная назначается в ближайшем окружении def или lambda, если только эта функция не объявит ее nonlocal или global.

603
задан Jota.Toledo 16 December 2017 в 10:27
поделиться

1 ответ

Можно использовать последний Subscription класс для отмены подписки для Заметного с не так грязный код.

Мы можем сделать это с normal variable, но это будет override the last subscription на каждом новом, подписываются, так избегайте, чтобы, и этот подход был очень полезен, когда Вы имеете дело с большим количеством числа Obseravables и типа Obeservables как [1 126] BehavoiurSubject и Subject

, Подписка

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

можно использовать это двумя способами,

  • можно непосредственно продвинуть подписку к Массиву Подписки

     subscriptions:Subscription[] = [];
    
     ngOnInit(): void {
    
       this.subscription.push(this.dataService.getMessageTracker().subscribe((param: any) => {
                //...  
       }));
    
       this.subscription.push(this.dataService.getFileTracker().subscribe((param: any) => {
            //...
        }));
     }
    
     ngOnDestroy(){
        // prevent memory leak when component destroyed
        this.subscriptions.forEach(s => s.unsubscribe());
      }
    
  • использование add() из Subscription

    subscriptions = new Subscription();
    
    this.subscriptions.add(subscribeOne);
    this.subscriptions.add(subscribeTwo);
    
    ngOnDestroy() {
      this.subscriptions.unsubscribe();
    }
    

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

Hope это помогает.. :)

0
ответ дан 22 November 2019 в 21:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: