💡 Ошибки с async/await в JavaScript
Асинхронный код в JavaScript стал проще с появлением
Решение — всегда оборачивать асинхронный код в обработку ошибок. На уровне функции это try/catch:
Но есть нюансы:
– Локальный
– Глобальная обработка нужна для неожиданных ошибок: в браузере это
– Параллельные вызовы лучше обрабатывать через
Асинхронный код в JavaScript стал проще с появлением
async/await, но у него есть коварная ловушка: ошибки в промисах могут «утекать» и не обрабатываться. Это приводит к UnhandledPromiseRejection, который проявляется далеко не сразу и часто маскирует настоящую причину бага.Решение — всегда оборачивать асинхронный код в обработку ошибок. На уровне функции это try/catch:
async function fetchData(url) {
try {
const res = await fetch(url)
if (!res.ok) {
throw new Error(`HTTP error: ${res.status}`)
}
return await res.json()
} catch (err) {
console.error("Ошибка при получении данных:", err)
throw err // пробрасываем выше, если нужно
}
}
Но есть нюансы:
– Локальный
try/catch хорош для точечной обработки (например, показать пользователю алерт).– Глобальная обработка нужна для неожиданных ошибок: в браузере это
window.onunhandledrejection, в Node.js — process.on('unhandledRejection').– Параллельные вызовы лучше обрабатывать через
Promise.allSettled(), чтобы ошибка одного промиса не обрушала весь батч.❤6👍6🔥2
This media is not supported in your browser
VIEW IN TELEGRAM
Вышел TypeScript 5.9, и это одно из самых «мягких» обновлений языка, но с рядом полезных улучшений.
Главное:
import defer — новая синтаксическая конструкция для отложенной загрузки модулей.--module node20, который упрощает работу с актуальными возможностями Node.js.Интереснее другое: команда подтвердила, что TypeScript 6.0 станет переходным релизом. Он подготовит разработчиков к «нативному порту» компилятора на Go, который планируется в TypeScript 7.0. Это значит, что через несколько лет мы можем увидеть заметный прирост в скорости компиляции и новые возможности инструментов.
Такое мы одобряем 😇
Microsoft
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥4❤3
🙈 Ловушки двойного равенства в JavaScript
Одна из самых частых проблем в JavaScript — неочевидные результаты сравнения с помощью
В реальных проектах это часто превращается в баги при проверке пользовательского ввода или данных из API.
Решение — использовать строгое сравнение
Нюансы:
– Валидацию входных данных всё равно нужно делать вручную:
– Иногда
– Линтеры вроде ESLint (
Одна из самых частых проблем в JavaScript — неочевидные результаты сравнения с помощью
==. Алгоритм абстрактного сравнения (Abstract Equality Comparison) приводит типы «на лету», из-за чего код может вести себя неожиданно:
0 == false // true
'' == false // true
[0] == false // true (!)
В реальных проектах это часто превращается в баги при проверке пользовательского ввода или данных из API.
Решение — использовать строгое сравнение
===, которое сравнивает и значение, и тип:
0 === false // false
'' === false // false
[0] === false // false
Нюансы:
– Валидацию входных данных всё равно нужно делать вручную:
=== не спасёт, если вы сравниваете строку "42" и число 42.– Иногда
== может быть уместным (например, при проверке на null и undefined одновременно: value == null). Но такие кейсы стоит явно документировать, чтобы не путать коллег.– Линтеры вроде ESLint (
eqeqeq: "error") позволяют сразу исключить двусмысленное сравнение на уровне правил проекта.👍7🔥5❤2
За эти годы браузер прошёл путь от «минималистичного проекта с комиксом» до полноценной платформы для приложений с ИИ.
Скорость, безопасность, стабильность и простота остаются его основными принципами, а впереди — новая эра с локальными AI-API и встроенным ассистентом Gemini.
📚 Подробности на Хабр: https://habr.com/ru/articles/944858/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🔥5❤2
Команда JavaScript for Devs подготовила перевод статьи о том, как кэширование DNS в NodeJS помогает ускорить работу приложений.
На примере инфраструктуры крупного онлайн-сервиса автор показывает, как незаметные на первый взгляд DNS-запросы могут превратиться в узкое место и как простое решение на уровне кода способно повысить стабильность и отклик системы.
📚 Подробности на Хабр: https://habr.com/ru/articles/945166/
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🔥3❤2
🕵️♂️ Supply Chain атака через NPM снова в деле
На днях произошла одна из крупнейших атак на NPM за последнее время — скомпрометирован аккаунт одного из известных авторов пакетов (да, через обычный фишинг), и в результате зловредный код оказался в десятках популярных пакетов, включая
Через цепочку зависимостей под угрозой оказались сотни тысяч других пакетов — а значит, и тысячи проектов.
Что делает вредонос? Если вы используете один из заражённых пакетов в браузере (например, тот же
🟣 Подменяет
🟣 Тихо перехватывает транзакции;
🟣 Заменяет адрес назначения на «похожий» адрес злоумышленника.
То есть вы решите отправить парочку ETH себе — в итоге... они придут уже не на ваш кошелёк.
Источник.
На днях произошла одна из крупнейших атак на NPM за последнее время — скомпрометирован аккаунт одного из известных авторов пакетов (да, через обычный фишинг), и в результате зловредный код оказался в десятках популярных пакетов, включая
is-arrayish.Через цепочку зависимостей под угрозой оказались сотни тысяч других пакетов — а значит, и тысячи проектов.
Что делает вредонос? Если вы используете один из заражённых пакетов в браузере (например, тот же
is-arrayish), скрипт:fetch, XMLHttpRequest и window.ethereum.request;То есть вы решите отправить парочку ETH себе — в итоге... они придут уже не на ваш кошелёк.
Список наиболее популярных зараженных пакетов (более двух миллиардов загрузок в неделю):
backslash (0.2.1);
chalk-template (1.1.1);
supports-hyperlinks (4.1.1);
has-ansi (6.0.1);
simple-swizzle (0.2.3);
color-string (2.1.1);
error-ex (1.3.3);
color-name (2.0.1);
is-arrayish (0.3.3);
slice-ansi (7.1.1);
color-convert (3.1.1);
wrap-ansi (9.0.1);
ansi-regex (6.2.1);
supports-color (10.2.1);
strip-ansi (7.1.1);
chalk (5.6.1);
debug (4.4.2);
ansi-styles (6.2.2);
color (5.0.1).
Источник.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4🔥3🤯2😱2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁6👍3🔥1
🤔 Почему браузеры ограничивают JavaScript таймеры?
Команда JavaScript for Devs подготовила перевод статьи о том, почему браузеры намеренно замедляют выполнение setTimeout и других таймеров.
Автор объясняет, как это связано с защитой пользователей, рассказывает о своём бенчмарке разных подходов (
📚 Подробности на Хабр: https://habr.com/ru/articles/945872/
Команда JavaScript for Devs подготовила перевод статьи о том, почему браузеры намеренно замедляют выполнение setTimeout и других таймеров.
Автор объясняет, как это связано с защитой пользователей, рассказывает о своём бенчмарке разных подходов (
setTimeout, MessageChannel, scheduler.postTask) и делает прогноз, какие таймеры будут использоваться в будущем.📚 Подробности на Хабр: https://habr.com/ru/articles/945872/
👍4🔥3🤔2
Forwarded from AI for Devs
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
😁3👍1
🫡 Еженедельный дайджест №1
Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!
Статьи:
– Google Chrome исполнилось 17 лет: история браузера и его будущее
– Кэширование DNS в NodeJS
– Почему браузеры ограничивают JavaScript таймеры?
Новости:
– Supply Chain атака через NPM снова в деле
Самый популярный комментарий этой недели – комментарий к статье "Google Chrome исполнилось 17 лет: история браузера и его будущее" от пользователя
@js_for_devs
Для тех, кто был слишком занят на неделе или просто пропустил некоторые посты, публикуем дайджест!
Статьи:
– Google Chrome исполнилось 17 лет: история браузера и его будущее
– Кэширование DNS в NodeJS
– Почему браузеры ограничивают JavaScript таймеры?
Новости:
– Supply Chain атака через NPM снова в деле
Самый популярный комментарий этой недели – комментарий к статье "Google Chrome исполнилось 17 лет: история браузера и его будущее" от пользователя
@Einherjar:"Если функция полезна только Chrome, но вредит открытому вебу — мы её пересматриваем. Chrome всё больше будет становиться умным ассистентом для жизни в интернете: помогать справляться с потоком информации"
Ага, например возможность установить uBlock Origin, капец как вредит открытому вебу и особенно (!) мешает справляться с потоком информации. Этому челу бы в политики идти, лицемерия и вранья просто через слово.
Прочитав статью задонатил мозилле - вот мой подарок гуглхрому
@js_for_devs
👍5❤2🔥2
Команда JavaScript for Devs подготовила перевод статьи о том, как CSS и HTML могут заменить значительную часть JavaScript.
Автор делится взглядом на веб как на искусство, показывает возможности современных фич CSS — от вложенности и
@starting-style до динамических viewport-единиц, — и доказывает, что сайты могут быть быстрыми, красивыми и интерактивными даже без JS.📚 Подробности на Хабр: https://habr.com/ru/articles/946498/
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯4👍3🔥2
Вы когда-нибудь набирали пароль, он не подходил, а потом оказывалось, что включён Caps Lock? В обычных инпутах это видно сразу, но в
type="password" — сюрприз!Проблема простая: пользователь не понимает, что пароль неверный, потому что регистр был включён. Итог — раздражение, лишние попытки, и неверный UX.
Хорошая новость — это легко отловить в браузере! Используйте
KeyboardEvent.getModifierState('CapsLock') и покажите подсказку:
document.querySelector('input[type=password]')
.addEventListener('keyup', e => {
const capsLockOn = e.getModifierState('CapsLock');
if (capsLockOn) {
console.warn('Caps Lock is ON!');
}
});
А
getModifierState умеет определять не только Caps Lock, но и NumLock, ScrollLock, Fn и даже Super (да, та самая Win/Command-клавиша).#js_tips@js_for_devs
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥4❤2
😎 Как Node.js выжимает максимум из I/O в 2025 году
Команда JavaScript for Devs подготовила перевод статьи о том, как Node.js выжимает максимум из I/O в 2025 году.
В ней подробно объясняется цикл событий, порядок фаз и то, как правильно писать код, чтобы серверы оставались отзывчивыми даже под нагрузкой.
📚 Подробности на Хабр: https://habr.com/ru/articles/947524/
Команда JavaScript for Devs подготовила перевод статьи о том, как Node.js выжимает максимум из I/O в 2025 году.
В ней подробно объясняется цикл событий, порядок фаз и то, как правильно писать код, чтобы серверы оставались отзывчивыми даже под нагрузкой.
📚 Подробности на Хабр: https://habr.com/ru/articles/947524/
🔥5❤2👍2
⚡ JavaScript всё ещё в топ-6, но теряет позиции
JavaScript держится на 6-м месте TIOBE Index с долей 3.22%, но за год просел на −0.70%. Вспомним, что в 2005 он был всего на 11-й позиции — путь наверх он прошёл впечатляющий.
🤔 Как думаете, сможет ли JS удержаться в топ-10 ещё 10 лет — или его место займёт TypeScript?
Источник.
#news@js_for_devs
JavaScript держится на 6-м месте TIOBE Index с долей 3.22%, но за год просел на −0.70%. Вспомним, что в 2005 он был всего на 11-й позиции — путь наверх он прошёл впечатляющий.
🤔 Как думаете, сможет ли JS удержаться в топ-10 ещё 10 лет — или его место займёт TypeScript?
Источник.
#news@js_for_devs
🔥4❤2👍2👏2
😵 React-монополист: как мы сами убиваем развитие фронтенда
Выбор React «по умолчанию» тормозит инновации, мешает развитию альтернативных фреймворков и превращает всю экосистему в монокультуру.
📚 Подробности на Хабр: https://habr.com/ru/articles/948072/
Выбор React «по умолчанию» тормозит инновации, мешает развитию альтернативных фреймворков и превращает всю экосистему в монокультуру.
Пора выбирать фреймворки по их соответствию задачам и техническим достоинствам, а не по инерции. Ваш следующий проект заслуживает большего, чем "React по умолчанию". Экосистема заслуживает инноваций, которые возможны только при разнообразии.
📚 Подробности на Хабр: https://habr.com/ru/articles/948072/
👍4🔥3👏3