9 вопросов на собеседовании об обещаниях

Promise опрос

Автор: Дэн Леви

Перевод: сумасшедший технический ботаник

оригинал:Но 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

  • выход из программы

Разобрать:

annotated-code/question-2.png

При использовании конструктора 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

Разобрать

annotated-code/question-3.png

при связывании.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 "Провал!"

  • напечатать "на самом деле, это сработало"

  • ничего не печатать

Разобрать:

annotated-code/question-9-4.gif

Добро пожаловать в общедоступную учетную запись внешнего интерфейса: первопроходец внешнего интерфейса, бесплатно получающий полную серию руководств от входа до расширенного веб-пакета.