Що таке Async pipe?
Чудове питання - це одне з найчастіших запитань про Angular.
Коротко (як на співбесіді)
Async pipe - це Angular pipe, який підписується на Observable або Promise у шаблоні й автоматично відписується під час знищення компонента.
Він також оновлює шаблон при нових значеннях.
Розгорнуто
async pipe дає змогу не писати subscribe вручну.
Приклад:
<div>{{ user$ | async }}</div>Angular:
- підписується на
user$ - оновлює template при нових значеннях
- робить unsubscribe в
ngOnDestroy
Еквівалент без async pipe
Те, що довелося б писати:
user?: User;
ngOnInit() {
this.user$.subscribe(u => this.user = u);
}
ngOnDestroy() {
this.subscription.unsubscribe();
}async pipe робить це автоматично.
Робота з *ngIf
Дуже типовий Angular-патерн:
<div *ngIf="user$ | async as user">
{{ user.name }}
</div>Це:
- підписка
- локальна змінна
- авто-unsubscribe
Що підтримує async pipe
Він працює з:
- Observable
- Promise
Наприклад:
<div>{{ promise | async }}</div>Чому async pipe важливий
На співбесіді важливо сказати:
- запобігає memory leaks
- спрощує код
- автоматично тригерить change detection
- стандартний Angular-підхід
Типове follow-up запитання
Дуже часто запитують:
Async pipe vs subscribe?
Відповідь:
async pipe кращий для UI-даних, тому що:
- немає ручного unsubscribe
- менше коду
- декларативний підхід
subscribe використовують, коли потрібна side-effect логіка.
Ще одне популярне питання
Чи працює async pipe з BehaviorSubject?
Так, тому що він працює з будь-яким Observable.
Міні-приклад Angular-сервісу
Дуже типовий патерн:
users$ = this.http.get<User[]>('/api/users');Template:
<li *ngFor="let user of users$ | async">
{{ user.name }}
</li>Це вважається "чистим Angular-підходом".
Коротка відповідь
Для співбесідиКоротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.