Будни разработчика
14.7K subscribers
1.23K photos
360 videos
7 files
2.1K links
Блог Lead JS-разработчика из Хельсинки
Автор: @bekharsky

По рекламе: https://telega.in/channels/htmlshit/card?r=GLOiHluU или https://t.iss.one/it_adv

Чат: https://t.iss.one/htmlshitchat

№5001017849, https://www.gosuslugi.ru/snet/679b74f8dad2d930d2eaa978
Download Telegram
#статья дня

Ну и раз я уже начал писать про нашу компанию, вот сегодняшняя статья дня — первая в корпоративном блоге на dev.to.

Мой коллега James Elderfield написал о простой и легкоподдерживаемой обработке ошибок в TypeScript: https://dev.to/supermetrics/simple-and-maintainable-error-handling-in-typescript-56lm

Круто работать с людьми, которые в чём-то лучше тебя. Только так и можно развиваться :)

#typescript #error #errorhandling
#фишка дня

Чота меня подзадолбало писать try-catch на каждый async-await вызов.

С “cырыми“ промисами как-то… чище на уровне синтаксиса: then-catch и всё.

Но вот тут пригодились тестовые задания на собеседованиях. У одного инженера я увидел подход, что на иллюстрации. Очень похоже на то, как возвращаются ошибки в Go.

В общем, я почитал об использовании такого подхода и остался доволен.

P. S. конечно, есть и другие примеры: https://gist.github.com/fnky/0a6cd5f39a7ad0ace79a7a4f5c999691

#js #async #await #promise #error #typescript
#фишка дня

Чота меня подзадолбало писать try-catch на каждый async-await вызов.

С “cырыми“ промисами как-то… чище на уровне синтаксиса: then-catch и всё.

Но вот тут пригодились тестовые задания на собеседованиях. У одного инженера я увидел подход, что на иллюстрации. Очень похоже на то, как возвращаются ошибки в Go.

В общем, я почитал об использовании такого подхода и остался доволен.

P. S. конечно, есть и другие примеры: https://gist.github.com/fnky/0a6cd5f39a7ad0ace79a7a4f5c999691

#js #async #await #promise #error #typescript
👍15🤔11👎2
#фишка дня

Как узнать, откуда была вызвана интересующая нас функция?

Правильный ответ — воспользоваться дебаггером.

Или console.trace().

Но это не всегда приемлемо. Мне вот нужно было иметь в логах название источника либо часть трассировки.

Если не используется ‘use strict’ (почему, кстати?) можно воспользоваться нестандартным свойством Function.caller:

function hello() {
console.log(“caller is " + hello.caller);
}

…или устаревшим arguments.callee.caller

function hello() {
console.log(“caller is " + arguments.callee.caller.toString());
}


Но это не выведет весь стек и вообще в нормальном коде не сработает. Поэтому, можно красиво схитрить сымытировав ошибку:

function Hello() {
console.log(“caller stack”, new Error().stack);
}


Тоже нестандартно, зато как красиво. Оттуда уже можно и имя первого родителя вытащить регуляркой.

#js #caller #error #stack
👍11🔥9🤔1
#фишка дня

Как узнать, откуда была вызвана интересующая нас функция?

Правильный ответ — воспользоваться дебаггером.

Или console.trace().

Но это не всегда приемлемо. Мне вот нужно было иметь в логах название источника либо часть трассировки.

Если не используется ‘use strict’ (почему, кстати?) можно воспользоваться нестандартным свойством Function.caller:

function hello() {
console.log(“caller is " + hello.caller);
}

…или устаревшим arguments.callee.caller

function hello() {
console.log(“caller is " + arguments.callee.caller.toString());
}


Но это не выведет весь стек и вообще в нормальном коде не сработает. Поэтому, можно красиво схитрить сымытировав ошибку:

function Hello() {
console.log(“caller stack”, new Error().stack);
}


Тоже нестандартно, зато как красиво. Оттуда уже можно и имя первого родителя вытащить регуляркой.

#js #caller #error #stack #бородач
👍16
#заметка дня

Cloudflare стал так часто падать, блокируя доступ ко всему и вся, что хочешь-не хочешь приходится извлекать из этого хоть какую-то полезную информацию.

Ну, помимо того, что Rust не настолько и крут в руках посвеместно проникших вайб-кодеров, если верить соцсетям.

Но нас тут заинтересовало, зачем Cloudflare добивает стандартную страницу ошибки комментариями?


<!-- a padding to disable MSIE and Chrome friendly error page -->


...не, ну ок, вроде оно само говорит, зачем. Но почему?

Дело в том, что если страница ошибки короче определённого минимального размера (обычно 512 байт), браузер скрывает её и показывает свою стандартную ошибку вида «This page cannot be displayed».

Очевидно, это не шибко-то и удобно: скрывает реальную причину проблемы, мешает автотестам. Собственно, в Internet Explorer была настройка скрытия дружелюбных страниц ошибок, а вот в Chrome так никогда и не сделали.

Да-да, динозаврик — это вот оно, оттуда. Очень весело, очень бесполезно.

Вот даже проблему в трекере подняли лет 15 назад: https://issues.chromium.org/issues/40361889, без подвижек.

На самом деле, добитие комментариями, конечно, не решение Cloudflare. Это работа сервера nginx: https://hg.nginx.org/nginx/file/release-1.6.0/src/http/ngx_http_special_response.c

Одобряем такое поведение, или динозаврик получше будет, котаны?

#nginx #cloudflare #error
🤩82👍2🫡1