Promise - об'єкт-обіцянка результату, який з'явиться пізніше: відповідь сервера, прочитаний файл, таймер. Замість того щоб передавати колбек, функція одразу повертає Promise, а результат на нього «підписують».
Три стани:
- pending - очікування, результату ще немає;
- fulfilled - виконано успішно, є значення;
- rejected - відхилено, є причина (зазвичай об'єкт
Error).
Перехід з pending відбувається один раз і назавжди: виконаний Promise не стане відхиленим.
fetch('/api/user')
.then((response) => response.json())
.then((user) => console.log(user.name))
.catch((error) => console.error('Не вдалося завантажити', error))
.finally(() => hideSpinner());
Що варто знати:
then()повертає новий Promise, тому виклики можна з'єднувати в ланцюжок. Значення, повернене зthen, стає результатом наступного кроку.- Один
catch()наприкінці ловить помилку з будь-якого попереднього кроку. - Promise без обробника помилки, який відхилився, дає
unhandledrejection- у Node.js це за замовчуванням завершує процес. fetchвідхиляє Promise лише при мережевій помилці. Відповідь 404 чи 500 - це виконаний Promise зresponse.ok === false.