Angular · Senior · Pytanie 49 z 75
Dlaczego zagnieżdżone wywołania subscribe uważa się za antywzorzec?
this.route.paramMap.subscribe((p) => {
this.api.load(p.get("id")!).subscribe((data) => (this.data = data));
});- ✓Poprawna odpowiedź: Wewnętrzne subskrypcje nie są anulowane ani sprzątane, co powoduje wyścigi i wycieki; użyj operatora spłaszczającego
- 2RxJS zabrania subskrybowania wewnątrz callbacków
- 3Sprawia to, że żądanie staje się synchroniczne
Wyjaśnienie
paramMap.pipe(switchMap((p) => this.api.load(p.get('id')!))) anuluje nieaktualne żądania przy zmianie parametru i zostawia jedną subskrypcję do zarządzania (albo żadnej - z async/toSignal).