Автор оригинала: Sam Williams.
У каждого застройщика есть свои любимые образцы, функции или биты кода. Это мой, и я использую его каждый день.
Что это такое?
Эта небольшая функция принимает обещание и возвращает массив ошибки и результат обещания. Это супер просто, но может использоваться для некоторых удивительных вещей.
Что это может делать?
Обработка очистки ошибок с async/ждать
Это главная причина, по которой я использую этот метод каждый день. На работе мы пытаемся написать весь код, используя async / ждать Синтаксис для будущей читаемости и ремонтопригодности. Проблема в том, что ожидание обещания не скажет вам, если обещание преуспело или потерпело неудачу.
let unimportantPromiseTask = () => {
Math.random() > 0.5 ?
Promise.reject('random fail') :
Promise.resolve('random pass');
};
let data = await unimportantPromiseTask();Если это обещание проходит тогда данные , но если он не удастся, то существует необработанное отклонение обещания, а данные никогда не присваиваются значение. Это может быть не то, что вы ожидаете, когда прочитали через код.
Передача обещания этого ручка Функция возвращает очень явный результат, который может легко понять при чтении.
let [err, res] = await handle(unimportantPromiseTask());
Затем вы можете сделать то, что вы хотите с ошибкой и результатом. Вот общий шаблон, который мы часто используем следующее:
if (err
(res && !res.data)) {
// error handling
return {err: 'there was an error'}
}
// continue with successful responseОсновная причина, по которой мы используем это вместо того, чтобы обернуть ожидаемое обещание в попробуйте/поймать Блок состоит в том, что нам легче читать.
Прекратить отказа
Эта функция может быть использована для обработки обещаний (отсюда и название). Потому что цепочки функций .catch на обещание, если он не удается, ошибка поймана. Это означает, что если есть обещание, которое вы звоните, и все равно, проходит ли он или терпит неудачу, просто передать его в ручка Действительно
unimportantPromiseTask(); // 50% chance of erroring handle(unimportantPromiseTask()); // never errors
Не передавая обещание в ручка Функция, будет шанс, что он терпит неудачу. Это все более важно, так как будущие версии узла будут прекращать процесс, когда Отклонение к необразованию обещания встречается.
Другие способы обрабатывать отклонения обещания, должны обернуть функцию в попытке поймать или просто церовать .catch на обещание. Хотя это очень действительны, используя ручка где мы можем сделать наш код более последовательным.
Спасибо, что читали этот быстрый пост на моей любимой линии кода. Если у вас есть любимая линия кода, дайте мне знать в комментариях, что это такое и почему!