Skip to main content

Чи можна використовувати async-операції в computed()?

Ні, не можна.

computed() має бути синхронним. Він одразу повертає значення, а не проміс.

Якщо всередині computed() використати async/await або fetch() - Angular видасть помилку або проігнорує зміни.

Чому?

Тому що computed() потрібен для миттєвих обчислень. Він працює як формула: вводиш числа - одразу бачиш результат. Якщо всередині буде затримка, сигнал не зможе відстежувати залежності правильно.

Що робити з async?

Якщо потрібно працювати з асинхронними даними (наприклад, HTTP-запитами), використовують:

  • effect() - для побічних async-операцій
  • RxJS (тимчасово)
  • або завантаження даних у signal вручну:
ts
const user = signal<User | null>(null); async function loadUser() { const res = await fetch('/api/user'); const data = await res.json(); user.set(data); }

Висновок: computed() - тільки для синхронних залежностей. Усе async - через ефекти або вручну.

Коротка відповідь

Для співбесіди
Premium

Коротка відповідь допоможе вам впевнено відповідати на цю тему під час співбесіди.