Выбор ответа Middle Ошибки обновлено

Как обернуть ошибку, сохранив исходную

Вопрос

Как правильно создать новую ошибку, сохранив исходную err (ES2022)?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: new Error('Не удалось сохранить', { cause: err }). Конструктор Error принимает вторым аргументом объект опций, и поле cause сохраняется в свойство err.cause новой ошибки.

Варианты ответа

  1. new Error('Не удалось сохранить', err, { chain: true })
  2. new Error('Не удалось сохранить').cause(err)
  3. new Error('Не удалось сохранить', { cause: err })правильный ответ
  4. Error.wrap(err, 'Не удалось сохранить', { cause: err })

Разбор

Конструктор Error принимает вторым аргументом объект опций, и поле cause сохраняется в свойство err.cause новой ошибки. DevTools и Node показывают цепочку причин. Если передать ошибку вторым аргументом напрямую, у неё нет поля cause (если только она сама не объект с таким полем), и причина потеряется. Метода cause() и статического Error.wrap нет.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме