Тест: 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 удобно воспринимать их как последовательность шагов. Каждый .then получает значение, возвращённое предыдущим .then (в качестве аргумента). Однако если ваш «шаг» столкнулся с ошибкой, все последующие «шаги» .then будут пропущены, пока не встретится .catch. Чтобы переопределить ошибку, достаточно вернуть значение, не являющееся ошибкой. Его можно получить в любом последующем .then.
Какой будет вывод у следующего кода?
var p = new Promise((resolve, reject) => { reject(Error('The Fails!'))}).catch(error => console.log(error.message)).catch(error => console.log(error.message))При цепочке .catch’ов каждый из них обрабатывает только ошибки, возникшие в предыдущих «шагах» .then или .catch. В этом примере первый .catch возвращает console.log, к которому можно получить доступ только добавив .then() после обоих .catch’ов.
Какой будет вывод у следующего кода?
new Promise((resolve, reject) => { resolve('Success!') }) .then(() => { throw Error('Oh noes!') }) .catch(error => { return "actually, that worked" }) .catch(error => console.log(error.message))Подсказка: .catch’s можно использовать, чтобы игнорировать (или переопределять) ошибки, просто возвращая обычное значение.
Этот приём работает только когда после него есть .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))