Моя любимая строка кода

moya lyubimaya stroka koda

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

Что это?

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

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

Чистая обработка ошибок с помощью 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

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

Прекратите необработанные отказы от обещаний

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

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

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

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

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

Добавить комментарий

Ваш адрес email не будет опубликован.