Делаем веб
54 subscribers
31 photos
1 video
88 links
Учимся строить из маленьких кирпичков большие веб-приложения

По вопросам и предложениям: @emdobryanskaya
Download Telegram
​​🙏🏻  Promise. Часть 2

В прошлой части мы познакомились (или вспомнили), что такое Promise и зачем он нужен. Пришло время понять, как его использовать в продукшене. А делается это с помощью обработчиков.

Обработчик успеха
Функция-обработчик в случае успеха может быть передана в метод .then. В себя эта функция принимает данные, с которыми Promise выполнился ("зарезолвился"). Пример:

const myPromise = new Promise((resolve, reject) => {
const name = 'Liza';
resolve(name);
});
// выведется "Hi, Liza!"
myPromise.then((data) =>
console.log(`Hi, ${data}`));


Обработчик ошибки
Функция-обработчик ошибки может быть передан двумя способами.

1 - через метод .then вторым аргументом. Формат работы такой же, как и в предыдущем случае. Пример:

const myPromise = new Promise((resolve, reject) => {
reject('custom error');
});

const onSuccess = (data) =>
console.log(`Hi, ${data}`);

const onError = (error) =>
console.error(
`Error: ${error}`
);

// выведется
// "Error: custom error"
myPromise.then(
onSuccess,
onError
);


2 - через специальный метод .catch. Работает аналогично предыдущему пункту.

⚠️ Важно помнить: ошибки Promise - это исключения. То есть с каким-то логически ошибочными историями Promise не справится самостоятельно. Например, если запрос упадет с кодом ответа, отличным от 200, catch не поймает эту ошибку, т.к. это штатное поведение, а не исключение.

⚠️ ⚠️ При оффлайн запросах Promise сразу падает в catch. Важно помнить это, например, при настройке оффлайн взаимодействия

Про другие интересные случаи ошибочного использования промисов можно прочитать здесь.

Финальная обработка

Если нам нужно, чтобы какая-то обработка была выполнена в любом случае, как бы Promise не выполнился, то можно использовать метод .finally. Формат такой же - передаем функцию, но она не принимает в себя данные.

Можно использовать finally до основных обработчиков then/catch. Например, для организации индикаторов загрузки. Finally пропустит все данные (результат или ошибку) дальше к следующим обработчикам.

Вот и всё про стандартное использование обработчиков Promise. В следующих частях мы посмотрим на цепочки промисов, а также разберем альтернативные способы асинхронной работы. Бегом делать веб! 🏃🏻‍♀️

#basics
Какой обработчик промиса лучше использовать, если нужно убрать лоадер после получения ответа с сервера?
Anonymous Quiz
0%
мы не можем точно отследить, когда пришел ответ, т.к. промис асинхронный
11%
then
11%
catch
78%
finally
0%
нужно придумывать свои костыли
обнаружила, что в моих квизах чаще участвуют бекендеры. Фронты, поднимайте стату!

#meh
Notion Meetup

Давно я не звала вас на митапы 🤓 Пора исправлять!

Сегодня в копилке предложений не совсем фронтовая тема, но как мне кажется - очень любопытная. В конце июня команда популярного инструмента для ведения заметок Notion проводит первый саммит. В программе выступления разных членов команды. Из прикольного ребята покажут (по крайней мере обещают), как они сами используют ноушен, что в нем вкусного появилось, как внедрить этот «заметочник» в жизнь своей команды для повышения продуктивности.

В общем для меня звучит вкусно, особенно в свете появления публичного Notion API. Кому тоже любопытно, ссылку прикрепляю.

⚠️ online
⚠️⚠️ english

#meetup #noJS
В одном из предыдущих постов упоминала про обработку ответов Promise, что он не ловит коды ответов, отличных от 200. Тру стори в том, что только что я сама потратила минут 15 в тупую в попытке поймать 401 с помощью try… catch. No comments 🤦‍♀️

#meh
🐥Dev Week от Mail.Ru Group

Всем привет, ребяты)
Давно хотела поделиться еще одним вкусным митапом, но как-то организаторы тянули с рассмотрением заявки 🥺

Итак, с 15 по 18 июня разработчики из Mail.ru Group проводят серию митапов (C++, Python, Frontend и QA).

17 июня в 19-00 будет секция фронтенда, где можно послушать про дизайн-систему на фронтенде, распознавание лиц, оффлайн-режим и кое-что еще, о чем пока умалчивается. Из интересного эта же встреча считается митапом MoscowJS 49, так что определенно уровень будет огненный 🔥

А теперь о грустном - митапы пройдут онлайн 😢 Был анонс, что часть гостей можно будет принять оффлайн в офисе Mail.ru, но последние ограничения внесли коррективы. Поэтому категорически грустим и ждем лучшей эпидемиологической обстановки.

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

Всем рабочего веба 🤓

P.S. я еще и на QA пойду. Первый "выход в свет" как профессиональный тестировщик 😎

#meetup #noJS
​​🖥 Доступность интерфейса

Есть много способов сверстать одну и ту же деталь интерфейса, согласны? Люди об этом даже статьи пишут, показывают свои наноультрамодные способы сделать кнопку из дивака. А зачем?

Вот придумали ребята ещё в лохматом HTML3 тег <button>, думали, все им пользоваться будут. Ха!

К чему я это всё. Стандартные браузерные решения (button, form etc.) могут сильно помочь в UX, потому что они из коробки поддерживают доступность с клавиатуры. А значит, пользователи смогут с большей вероятностью осуществить целевое действие.

Нет, вы конечно можете играться с tabIndex и ставить швабры для удержания потолка. Если у вас есть время и вы можете аргументировать, почему так лучше 😉

Мораль (и совет при выполнении тестовых заданий): используйте браузерные решения, чтобы облегчить себе и клиентам жизнь.

Всем чистой консоли ✌️

#advanced
☝🏻если что, мысль выше взята не с потолка: ребята из команды мессенджера ВКонтакте активно прувят эту идею 🤓
​​🤯 Какой браузер мне нужен?

Mac OS + Google Chrome = 🤓

Так начинают работать многие новички, когда приходят на фронтенд-стажировку. И по правде сказать, мне потребовалось два года, чтобы переехать на … Хотя об этом позже.

Чем хорош хром?
☑️ Поддержка современного JS
☑️ Удобные developer tools
☑️ Куча гайдов (в тч на learnjs)
☑️ Не сильные breaking changes между версиями
☑️ Довольно большое количество активных пользователей
☑️ Расширения

Что плохо?
Не все пользуются им 🤗
Мобильная версия иногда сильно отличается
На iPhone он такой же Safari, нужно искать андроид
Постоянно обновляющиеся настройки, особенно приватности (привет, CORS 🙋‍♀️)
Следит за нами и сливает инфо Треккинг

Что по альтернативам?
Я сейчас переехала на Firefox. Ребят, лиса реально очень симпатичная. Инструменты разработчика a-ka Google. Побезопаснее (говорят). Из коробки удобно работать с кросс-доменными куками (не спрашивайте, локальная разработка без этого болит). Правда в симуляторе надо каждый раз обновлять страницу в ручную. Но зато цветопередача просто вишенка 🍒

Safari тоже классный, но как-то и багов много в консоли, и функции многие надо полифилить, да и инструменты там довольно сложные.

В Яндексе, к слову, разрабы должны работать только в Я.Браузере. Тоже довольно приятный инструмент. Он почти как хром. Но почти, помните об этом.

Вообще советую всё-таки регулярно выходить из зоны комфорта и по умолчанию использовать другой браузер. Чтобы не замыливалось. Я, например, сейчас все личные вопросы решаю через Safari. На Big Sur он просто космос 🚀

Все субъективно. Решать вам. Всем браузеров без багов 🤟🏻

#meh
✌️Про браузеры. Продолжение

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

Логирование переменной, в которой пустая строка.
Хром печатает примерно ничего. Не разберешь, он что-то напечатал или нет.
Лиса показывает, что строка пустая.

Фича? Фича! Классно? Классно! 😇

Выбирайте удобный браузер 😎 Всем хорошего дня 🙂

#meh
🥨 Конкатенация строк. Ускоряем фронтенд

Как бы решали задачу: "Объедините строки А и Б в одну строку"? Казалось бы, задача не самая сложная. Но есть "но"... 🙊

Мы знаем как минимум четыре способа соединить строки:

1. Шаблонные строки (моя любофф). Удобно, быстро, без экранирования кавычек, всё предельно понятно. Разве что бэктик на клавиатуре искать долго 😃. Пример: ${a}{b};
2. Join. Метод пришел от массивов и работает аналогично. Из приятного - можно указать разделитель и объединить строки, например, через запятую. Но можно и просто склеить без проблем. Пример:
[‘hello', ' world'].join();
3. Concat. По смыслу наиболее подходящий для нашей задачи способ. Из прикольного, можно объединять строку с массивом, и все автоматически преобразуется к строке. из не прикольного - нужна какая-то начальная строка, чтобы у нее вызывать этот метод. Пример: a.concat(b);
4. Оператор сложения (+). Наиболее прикольный в JS способ, как мне кажется. По сути "склеивает" две строки. И не только строки 😁 Пример: а + b

Вспомнили? А знаете, какой из способов самый быстрый?

#basics
Какая конкатенация самая быстрая?
Anonymous Poll
0%
Шаблонные строки
17%
Join
33%
Concat
50%
+
👆К чему я это все. Про оптимизацию фронтенда.

Я провела небольшой ручной тест в консоли браузера и была в шоке 🤯

Вы молодцы, что угадали. Обычный плюс - это самая быстрая склейка строк. Хоть и самая опасная. Зато примитивная 😋

Так что в случае острой необходимости оптимизаций вы теперь знаете, куда смотреть.

Всем шустрого веба 🔥
👀 Вы когда-нибудь задумывались, что ваши глаза могут вас обманывать?

А это может действительно искажать восприятие у пользователей. Но прежде, чем я расскажу, к чему это все, давайте проведём тест. Посмотрите внимательно на картинки выше ☝🏻

#meh
Квадрат выровнен по вертикали на…
Anonymous Poll
87%
1 картинке
13%
2 картинке
📐 Точность против UX

Оказывается, что объекты, математически точно выровненные по вертикали не являются таковыми для глаз пользователей. И чтобы это исправить, надо поднять объект немного выше геометрической середины. Не знаю, байка или нет, но мне квадрат на левой картинке сразу показался выровненным нормально 😂

Похожий эффект, который я лично постоянно ловлю, происходит со шрифтами. Например, расположить ровно по вертикали слово с "хвостистыми" буквами типа р, д, б - это какая-то хард-задача для биг брейнов. Что уж говорить, что буква "О" всегда кажется меньше любой прямоугольной буквы.

Короче говоря, не стоит забывать про прикольную тему с изучением визуального дизайна и различных пользовательских болей в этом ключе. Ведь мы не кодеры, а разработчики.

Всем мир ✌️
С душой, с заботой, с 200 ОК 🎁