У каждого разработчика есть свои любимые шаблоны, функции или фрагменты кода. Это мой и пользуюсь им каждый день.

Что это?

Эта небольшая функция принимает обещание и возвращает массив ошибок и результат обещания. Это очень просто, но с его помощью можно делать удивительные вещи.

Что это может делать?

Чистая обработка ошибок с помощью async / await

Это основная причина, по которой я использую этот метод каждый день. На работе мы пытаемся писать весь код с использованием синтаксиса async / await для удобства чтения и поддержки в будущем. Проблема в том, что ожидание обещания не говорит вам, выполнено ли обещание или нет.

let unimportantPromiseTask = () => {
    Math.random() > 0.5 ? 
        Promise.reject('random fail') : 
        Promise.resolve('random pass');
};
let data = await unimportantPromiseTask();

Если это обещание проходит, то data = ‘random pass', но если оно не выполняется, происходит необработанное отклонение обещания, и данным никогда не присваивается значение. Это может быть не то, что вы ожидаете при чтении кода.

Передача обещания этой handle функции возвращает очень явный результат, который любой может легко понять, прочитав его.

let [err, res] = await handle(unimportantPromiseTask());

Затем вы можете делать все, что хотите, с ошибкой и результатом. Вот общий шаблон, который мы часто используем в следующий раз:

if (err || (res && !res.data)) { 
    // error handling
    return {err: 'there was an error’}
}
// continue with successful response

Основная причина, по которой мы используем это вместо того, чтобы заключать ожидаемое обещание в блок try / catch, заключается в том, что нам легче читать.

Остановите необработанные отказы от обещаний

Эта функция может использоваться для обработки обещаний (отсюда и название). Поскольку функция привязывает .catch к обещанию, в случае неудачи будет обнаружена ошибка. Это означает, что если есть обещание, которое вы вызываете, и вам все равно, пройдет оно или нет, просто передайте его в handle!

unimportantPromiseTask(); // 50% chance of erroring
handle(unimportantPromiseTask()); // never errors

Без передачи обещания в функцию handle есть шанс, что она потерпит неудачу. Это становится все более важным, поскольку будущие версии Node собираются завершить процесс при обнаружении необработанного отклонения обещания.

Другой способ обработать отклонение обещания - заключить функцию в ловушку попытки или просто привязать .catch к обещанию. Хотя они оба очень верны, используя handle, где мы можем сделать наш код более согласованным.

Спасибо, что прочитали этот небольшой пост о моей любимой строке кода. Если у вас есть любимая строка кода, дайте мне знать в комментариях, что это такое и почему!
Если вам понравилась эта статья, было бы здорово, если бы вы могли нажать эту кнопку 👏 и подписаться на меня, чтобы увидеть больше статей по кодированию !