Автор: Дэн Леви
Перевод: сумасшедший технический ботаник
оригинал:Но levy.net/JavaScript-…
Копирование без разрешения строго запрещено
👇 ответьте на следующие девять вопросов 👇
1. Несколько.catch
var p = new Promise((resolve, reject) => {
reject(Error('The Fails!'))
})
p.catch(error => console.log(error.message))
p.catch(error => console.log(error.message))
Каким будет вывод приведенного выше кода? Пожалуйста, выберите правильный ответ:
-
распечатать сообщение один раз
-
напечатать сообщение дважды
-
UnhandledPromiseRejectionWarning
-
выход из программы
Разобрать:
Мы используем метод конструктора для создания промиса, иreject
Обратный вызов немедленно запускает ошибку.
потом.catch
Работает как DOM.addEventListener(event,callback)
или генератор событий.on(event,callback)
, где ** может добавить несколько обратных вызовов. **Каждый вызывается с одинаковыми параметрами.
2. Несколько.catch
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))
Каким будет вывод приведенного выше кода? Пожалуйста, выберите правильный ответ:
-
распечатать сообщение один раз
-
напечатать сообщение дважды
-
UnhandledPromiseRejectionWarning
-
выход из программы
Разобрать:
При использовании конструктора Promise вы должны вызватьresolve()
илиreject()
Перезвоните. Конструктор Promise не использует возвращаемое вами значение, поэтому фактически больше не получаетPromise.reject()
Созданы другие промисы.
существуетPromise.reject()
нет после.catch
, ответUnhandledPromiseRejectionWarning
.
3. Ссылки.then
а также.catch
var p = new Promise((resolve, reject) => {
reject(Error('The Fails!'))
})
.catch(error => console.log(error))
.then(error => console.log(error))
Каким будет вывод приведенного выше кода? Пожалуйста, выберите правильный ответ:
-
Ошибки печати и
undefined
-
печатать дважды ошибка
-
UnhandledPromiseRejectionWarning
-
undefined
Разобрать
при связывании.then
а также.catch
, полезно думать о них как о последовательности шагов. каждый.then
оба получают предыдущий.then
Возвращаемое значение как его аргумент. Однако, если ваш «шаг» сталкивается с ошибкой, любой последующий.then
«Шаги» будут пропущены до.catch
. Если вы хотите переопределить ошибку, все, что вам нужно сделать, это вернуть значение, не являющееся ошибкой. любым последующим.then
доступ.
намекать: console.log()
всегда возвращайсяundefined
.
4. Ссылки.catch
var p = new Promise((resolve, reject) => {
reject(Error('The Fails!'))
})
.catch(error => console.log(error.message))
.catch(error => console.log(error.message))
Каким будет вывод приведенного выше кода? Пожалуйста, выберите правильный ответ:
-
печатать сообщение об ошибке один раз
-
печатать сообщение об ошибке дважды
-
UnhandledPromiseRejectionWarning
-
выход из программы
Разобрать
при связывании.catch
, каждый обрабатывает только предыдущий.then
или ``.поймать“步骤” 中引发的错误。在此例中,第一个
.catch返回
console.log,只能通过在两个
.catch之后添加
.then()` для доступа.
5. Несколько.catch
new Promise((resolve, reject) => {
resolve('Success!')
})
.then(() => {
throw Error('Oh noes!')
})
.catch(error => {
return "actually, that worked"
})
.catch(error => console.log(error.message))
Каким будет вывод приведенного выше кода? Пожалуйста, выберите правильный ответ:
-
распечатать сообщение один раз
-
напечатать сообщение дважды
-
UnhandledPromiseRejectionWarning
-
ничего не печатать
Разобрать
намекать: .catch
Ошибки можно игнорировать (или переопределять), просто возвращая обычное значение.
Этот трюк используется только в последующих.then
Действителен при получении этого значения.
6. .then
процесс между
Promise.resolve('Success!')
.then(data => {
return data.toUpperCase()
})
.then(data => {
console.log(data)
})
Каким будет вывод приведенного выше кода? Пожалуйста, выберите правильный ответ:
- выведите «Успех!» и «УСПЕХ!»
- печатать "Успех!"
- печатать "УСПЕХ!"
- ничего не печатать
Разобрать
Подсказка: .then передает данные последовательно, начиная сreturn value
к следующему.then(value => /* handle value */)
.
чтобы передать значение следующему.then
,return
это ключ.
7. .then
процесс между
Promise.resolve('Success!')
.then(data => {
return data.toUpperCase()
})
.then(data => {
console.log(data)
return data
})
.then(console.log)
Каким будет вывод приведенного выше кода? Пожалуйста, выберите правильный ответ:
- печатать "УСПЕХ!"
- печатать "Успех!"
- выведите «УСПЕХ!» и «УСПЕХ!»
- ничего не печатать
Разобрать:
есть дваconsole.log
вызов будет вызван.
8. .then
процесс между
Promise.resolve('Success!')
.then(data => {
data.toUpperCase()
})
.then(data => {
console.log(data)
})
Каким будет вывод приведенного выше кода? Пожалуйста, выберите правильный ответ:
- печатать "УСПЕХ!"
- печатать "Успех!"
- выведите «УСПЕХ!» и «УСПЕХ!»
-
Распечатать
undefined
Разобрать:
намекать:.then
Передавайте данные последовательно, от возвращаемого значения к следующему.then(value => /* handle value */)
.
чтобы передать значение следующему.then
,return
это ключ.
9. .then
а также.catch
процесс между
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))
Каким будет вывод приведенного выше кода? Пожалуйста, выберите правильный ответ:
-
выведите «О нет!» и «The fails!»
-
печатать "О нет!"
-
print "Провал!"
-
напечатать "на самом деле, это сработало"
-
ничего не печатать
Разобрать: