Promise
Обещание результата, который будет готов позже: успех или ошибка.
Доступно с: ES2015
Синтаксис
new Promise(executor)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| executor | Function | Функция, которая запускает работу и вызывает resolve(значение) при успехе или reject(ошибка) при неудаче. |
Возвращаемое значение
PromiseОбъект-обещание результата, который появится позже.
Примеры
Промис, который выполнится через 100 мс:
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
await delay(100);
console.log('100 ms later');Результат:
100 ms laterУспех и ошибка:
function checkAge(age) {
return new Promise((resolve, reject) => {
if (age >= 18) resolve('Access granted');
else reject(new Error('Too young'));
});
}
checkAge(20).then((message) => console.log(message));
checkAge(15).catch((error) => console.log(error.message));Результат:
Access granted
Too youngПримечания
У промиса три состояния: ожидание (pending), выполнен (fulfilled) и отклонён (rejected). Состояние меняется один раз: повторные вызовы resolve и reject игнорируются.
Сами промисы создают редко — чаще их возвращают готовые функции, например fetch(). Результат удобнее всего получать через await.
См. также
- Promise.prototype.then — Задаёт, что сделать с результатом промиса.
- async function — Функция, которая всегда возвращает промис и внутри которой можно использовать await.
- await — Ждёт результата промиса и возвращает его значение.
- Promise.all — Ждёт выполнения всех промисов параллельно.
Вопросы и ответы по теме
В учебнике
- Промисы — Промисы в JavaScript: состояния промиса, then, catch, finally, создание промиса через new Promise и цепочки.