Тест: 9 вопросов о JavaScript Promise
Большене забывайте выполнять обещания!

Вы знаете JavaScript Promises?
- Докажите своё мастерство в JavaScript! 🚀
- Ищите подсказки (Большая кнопка в нижнем углу).
- Запускайте код в консоли браузера (обычно
F12или найдите её) или используйте repl.it*. - Не стесняйтесь твитнуть мне @justsml. Буду рад услышать ваше мнение!
👇 Ответьте на 9 вопросов ниже👇
Какой будет вывод у следующего кода?
var p = new Promise((resolve, reject) => { reject(Error('The Fails!'))})p.catch(error => console.log(error.message))p.catch(error => console.log(error.message))Мы создаём Promise с помощью конструктора, сразу вызывая ошибку через колбэк reject.
Затем обработчики .catch работают как .addEventListener(event, callback) в DOM или .on(event, callback) в Event Emitter, где можно добавить несколько обработчиков. Каждый будет вызван с теми же аргументами.
Какой будет вывод у следующего кода?
var p = new Promise((resolve, reject) => { return Promise.reject(Error('The Fails!'))})p.catch(error => console.log(error.message))p.catch(error => console.log(error.message))При использовании конструктора Promise необходимо вызвать либо колбэк resolve(), либо reject(). Конструктор Promise игнорирует возвращаемое исполнителем значение, поэтому дополнительный промис, созданный с помощью Promise.reject(), не привязан к p. Оба обработчика прикреплены к p, который остаётся в состоянии ожидания, а возвращённый отклонённый промис отмечается как необработанный средой выполнения.
Какой будет вывод у следующего кода?
var p = new Promise((resolve, reject) => { reject(Error('The Fails!'))}).catch(error => console.log(error)).then(error => console.log(error))Отклонённый промис пропускает обработчики успешного выполнения .then до ближайшего .catch. Здесь .catch выводит ошибку и возвращает результат console.log — undefined. Следующий .then получает и выводит undefined.
Возврат обычного значения, даже объекта Error, переводит цепочку в успешное состояние. Чтобы сохранить отклонение, нужно выбросить ошибку или вернуть отклонённый промис. Возвращённый промис передаёт цепочке своё состояние.
Какой будет вывод у следующего кода?
var p = new Promise((resolve, reject) => { reject(Error('The Fails!'))}).catch(error => console.log(error.message)).catch(error => console.log(error.message))Первый .catch выводит сообщение и возвращает undefined — результат вызова console.log. Цепочка становится успешно выполненной, поэтому следующий .catch пропускается. Чтобы прочитать возвращённое значение, можно добавить .then.
Какой будет вывод у следующего кода?
new Promise((resolve, reject) => { resolve('Success!') }) .then(() => { throw Error('Oh noes!') }) .catch(error => { return "actually, that worked" }) .catch(error => console.log(error.message))Первый .catch обрабатывает ошибку и возвращает строку "actually, that worked". Цепочка становится успешно выполненной, поэтому следующий .catch не вызывается и ничего не выводится. Для восстановления после ошибки не требуется последующий .then; он нужен лишь для использования результата.
Какой будет вывод для следующего кода?
Promise.resolve('Success!') .then(data => { return data.toUpperCase() }) .then(data => { console.log(data) })Подсказка: .then’s передают данные последовательно, от return value к следующему .then(value => /* handle value */).
return является ключевым для передачи значения следующему .then.
Какой будет вывод у следующего кода?
Promise.resolve('Success!') .then(data => { return data.toUpperCase() }) .then(data => { console.log(data) return data }) .then(console.log)Будут вызваны 2 вызова console.log.
Какой будет вывод у следующего кода?
Promise.resolve('Success!') .then(data => { data.toUpperCase() }) .then(data => { console.log(data) })Подсказка: .then’s передают данные последовательно, от return value к следующему .then(value => /* handle value */).
return является ключевым, чтобы передать значение следующему .then.
Какой будет вывод у следующего кода?
Promise.resolve('Success!') .then(() => { throw Error('Oh noes!') }) .catch(error => { return 'actually, that worked' }) .then(data => { throw Error('The fails!') }) .catch(error => console.log(error.message))
Первый .catch восстанавливает цепочку, возвращая строку. Следующий .then выбрасывает новую ошибку The fails!, и последний .catch выводит только её сообщение.