是否有必要考虑使用observable.forEach取消订阅(由rxjs内部订阅)

时间:2019-04-17 16:42:23

标签: angular rxjs

可观察到的Angular形式的valueChanges可以这种形式使用:

import time
def ll(a):
    return all(x in "0123456789.+-" for x in a)
def countdot(text):
    count = 0
    for c in text:
        if c == '.':
            count = count + 1
    return count
def countminus(text):
    count = 0
    for c in text:
        if c == '-':
            count = count + 1
    return count
def a1():
    a = input("Wprowadz pierwszą liczbę: ")
    err = True
    while err == False:
        if ll(a)== True and a != "." and a != "-" and a != "+" and countdot(a) <= 1 and countminus(a) <= 1:
            a = float(a)
            err = True
        else:
            print("To nie liczba!")
            b = input("Wprowadz pierwszą liczbę: ")
    return a
def b1():
    err = True
    b = input("Wprowadz drugą liczbę: ")
    while err == True:
        if ll(b)== True and b != "." and b != "-" and b != "+" and countdot(b) <= 1 and countminus(b) <= 1:
            b = float(b)
            err = False
        else:
            print("To nie liczba!")
            b = input("Wprowadz drugą liczbę: ")
    return b
repeat = True   
while repeat == True:
    print("Prosty Kalukator. Wybierz działanie: ")
    print("Dodawanie: +, Odejmowanie: -, Mnożenie: *, Dzielenie: /")
    d = input()
    while d != "+" and d != "-" and d != "*" and d != "/" :
        print("Błąd! Dodawanie: +, Odejmowanie: -, Mnożenie: *, Dzielenie: /")
        d = input()
    if d == "+" :
        a = a1()
        b = b1()
        print("Wynik działania to: ")
        p = a + b
        p = float(p)
        print(p)

在这种情况下,我是否需要担心取消订阅?使用forEach,我的代码中没有显式的subscribe()。这是否意味着rx.js或angular将处理退订?

2 个答案:

答案 0 :(得分:0)

我认为这里不需要取消订阅,因为没有初始订阅。如果您使用的是以下内容,则需要退订。

public sub = new Subscription(); // import from rxJS

this.sub.add(form.valueChanges.subscribe(data => {//some logic}));

public ngOnDestroy(): void
{
    this.sub.unsubscribe();
}

form.valueChanges.forEach((v)=>console.log(v)); // no UnSub needed.

据我了解,大多数订阅都需要处理和取消订阅。如果不使用上述方法,HTTP方法将退订。

答案 1 :(得分:0)

forEach 在内部进行订阅,然后返回承诺。

有了这个承诺,您就无法退订。