Задать вопрос
  • Могу ли я в чистом javascript в асинхронной функции подождать возникновения события?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Первое что нужно понимать, что async/await - это всего лишь синтаксический сахар над промисами, а значит имеет все особенности работы с ними:
    Во-первых, промис может разрешится (или отклонится, но в этой задаче reject не нужен) только единожды. Это сильно отличает их от событий, которые могут происходить многократно.
    Во-вторых, промисы обрабатываются на особой фазе event loop называемой microtasks, что опять же отличается от событий, которые выполняются на другой фазе (tasks). Это означает, что обработка промиса (колбэк метода then, или сахар над ним в виде await оператора) всегда произойдет асинхронно от возникновения события. Это накладывает ряд ограничений, например не получится сделать preventDefault у объекта или не получится запустить действия требующие синхронной работы из trusted события (play не muted video/audio, вход в фулскрин и тд).

    В простом варианте можно слушать событие разово, для чего можно использовать параметр once. Так же для оптимизации можно использовать параметр passive, так как нам все равно поздно вызывать preventDefault, а в некоторых случаях это может дать нам оптимизацию. Ну и управлять параметром capture попросту бесполезно, так как обработка будет в любом случае после обеих фаз. В итоге для этого можно пользоваться такой функцией хелпером:
    function listenOnce(target, event) {
        return new Promise(resolve => {
            target.addEventListener(event, resolve, {
                once: true,
                passive: true
            });
        });
    }
    
    // использование
    const event = await listenOnce(document, 'DOMContentLoaded');
    console.log(event);


    Если же нужно слушать событие многократно, то разумно обернуть прослушивание события в асинхронный итератор. Здесь так же присутствуют все ограничения связанные с промисами, но за счет того, что у нас будет итератор по множеству промисов, мы сможем слушать событие многократно. так же тут нужно предусмотреть возможность отписаться от события. Хелпер для данного случая получится такой:
    function listen(target, event) {
        let currentResolve = () => {};
        const handler = event => currentResolve({value: event, done: false});
        return {
            [Symbol.asyncIterator]() {
                target.addEventListener(event, handler, {passive: true});
                return {next: () => new Promise(resolve => {
                    currentResolve = resolve;
                })};
            },
            stop() {
                target.removeEventListener(event, handler);
                currentResolve({done: true});
            }
        };
    }
    
    // использование
    for await(const event = listenOnce(window, 'scroll')) {
        console.log(event);
    }
    
    // с отпиской
    const eventIterator = listenOnce(window, 'scroll');
    let count = 10;
    for await(const event = eventIterator) {
        console.log(event);
        if(--i === 0) {
            eventIterator.stop();
        }
    }
    Ответ написан
    4 комментария
  • Как правильно оценить свой скилл в web программировании?

    AleksandrB
    @AleksandrB
    Совсем недавно вывел "Hello world"
    Устроиться на работу.
    Ответ написан
    Комментировать
  • Как правильно оценить свой скилл в web программировании?

    На мой взгляд самый лучший метод испытать свои знания для программиста - ходить на собеседования. Во-первых есть возможность взять высокую планку (к примеру сразу попробоваться на senior'а) и понять чего в чем тебе еще надо расти, во-вторых если ты соответствуешь уровню и пройдешь собеседование есть шанс найти работу с более интересными для тебя проектами.
    Ответ написан
    Комментировать
  • Направление для изучения программирования «с нуля». Какую литературу посоветуете?

    mezastel
    @mezastel
    Финансовая математика, программирование
    Для начала попытайтесь определить какая область программирования вам по душе. Это могут быть сайты, игры, мобильные приложения, офисное ПО, встраиваемые системы, и так далее. И вот уже на базе этого выбирайте какие технологии изучать.
    Ответ написан
    Комментировать
  • Не умирают ли браузерные игры?

    Stalker_RED
    @Stalker_RED
    Чисто браузерные практически вымерли. Любая браузерная может обмазаться электроном, и выйти в стим и на телефоны.
    Ответ написан
    Комментировать
  • Сервисы для генерации верстки?

    approximate_solution
    @approximate_solution
    JS Developer. Angular\React\Vue\Ember
    https://webflow.com/?utm_source=google&utm_medium=...

    Но учтите, никто не сделает верстку лучше, чем хороший верстальщик. Сервисы генераторы - по сравнению с опытным разработчиком, ничто.
    Ответ написан
    Комментировать
  • Как еще не совсем состоявшемуся junior-у найти работу/стажировку/наставника?

    saboteur_kiev
    @saboteur_kiev Куратор тега Карьера в IT
    software engineer
    Ну если и есть такие работодатели, то они явно не на тостере.
    По своему опыту скажу, что никому не нужны несостоявшиеся работники, за которыми еще нужен глаз и глаз. Есть работа, есть куратор который может подсказать что-то по мелочи. Но на работе никто не учит работать. Учишься сам, ВЫПОЛНЯЯ работу.
    Я не понимаю, откуда у современной молодежи взялся этот тренд, что на работе всему научат.
    Конечно на работе ты получишь много опыта и знания, но "минимальные навыки" - это когда ты уже знаешь и умеешь все, чтобы выполнять задачи, а не кое-кто поковырял.

    Подработка - в ИТ такого как бы и нет.
    Разработчик на пол-ставки, еще и джуниор - такое вообще звучит бессмысленно.
    Ладно еще художник-дизайнер на пол-ставки.
    Или девопс/сисадмин в простых проектах.
    Ладно еще сеньор-архитектор на пол-ставки, курирует две-три команды разработчиков в одном проекте.
    Но джуниор-разработчик, который и своей работы не особо делает и внимание кураторов отвлекает - такое просто никому не нужно и не востребовано. И если даже в порядке исключения, такой работодатель найдется, это будет крайне редкая возможность.

    Подтягивайте навыки до уверенного джуна, и уже тогда имеет смысл искать работу.
    В мире есть множество опенсорс проектов, в том числе и на питоне и на C#, где можно подтянуть навыки
    Можно зарегаться на фрилансе и подсматривать задачи там. Даже есть шанс, что получится успеть перехватить пару задач и выполнить их не для себя а за деньги.

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

    anton_reut
    @anton_reut
    Начинающий веб-разработчик
    Для любой Сложной Многофункциональной Системы веб сайт это только один из возможных каналов взаимодействия с системой. Само ядро системы может быть написано вообще на каком-нибудь Си и иметь помимо сайта выход на моб. приложение (Java), десктоп приложение (Си), какую-нибудь ERP-систему, веб-портал (PHP, Net), то есть Ядро единое, а каналов взаимодействия (которые написаны на разных языках) с ним много. Так что все ответы про Питон или боже упаси Яваскрипт это конечно же чушь собачья.
    Просто почитай про бэкэнд таких проектов как Авито, ВК, фейсбук.
    Ответ написан
    1 комментарий
  • Должен ли React\Angular\Vue разработчик верстать?

    Krasnodar_etc
    @Krasnodar_etc
    fundraiseup
    Общий ответ только один, имхо:

    Фронтенд разработчик должен решать фронтенд-задачи, которые перед ним ставят. Вёрстка в принципе относится к понятию "фронтенд". Если перед фронтендером ставят задачу сверстать что-то -- он должен уметь это делать..
    А вот есть ли у фронтенда задачи по вёрстке -- это уже очень субъективно, на каждом проекте по-разному

    Опять же, имхо:
    Чем лучше фронтенд верстает -> Тем лучше он может решать задачи + шире круг задач, которые он может решать -> Тем он дороже на рынке
    Ответ написан
    Комментировать
  • Что делать если не запускается sublime text?

    metallix
    @metallix
    Backend - developer
    Комментировать
  • Что значит посадка верстки на движок WordPress?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    Да видимо это и имеют ввиду.

    Начните отсюда.

    https://codex.wordpress.org/%D0%A1%D0%BE%D0%B7%D0%...
    Ответ написан
    Комментировать
  • Как подружить свойства display, opacity и transition?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    Свойство display не анимируется. Использую так
    .elem {
      opacity: 0;
      visibility: hidden;
      z-index: -1;
    } 
    
    .elem.active {
      opacity: 1;
      visibility: visible;
      z-index: 1;
    }

    Плюс транзишн и трансформ если нужно
    Ответ написан
    Комментировать
  • Что надо знать и уметь, чтобы претендовать на позицию Джуниора?

    @d-sem
    Уметь нужно то, что пишут в вакансии. В идеале - еще и иметь представление о том что у того же работодателя требуется на мидла. Требовать могут все что угодно:)

    Также, адекватные интервьюверы на собеседованиях пространно отвечают на вопрос, адекватно указывая на слабые стороны.

    Чтобы не забивать голову, хотелось бы получить направление, что стоит знать Джуну, а дальше в процессе работы уже углубляться в недры JS.


    https://qna.habr.com/search?q=junior
    причем в ответах тоже есть много полезной информации https://qna.habr.com/search/answers?q=junior
    Ответ написан
    Комментировать
  • Как правильно использовать модификаторы в методологии BEM?

    Get-Web
    @Get-Web Куратор тега CSS
    Front-End Developer
    Зависит от ситуации, если есть возможность, лучше использовать модификатор.
    БЭМ хорошо решает проблему специфичности, благодаря чему поведение становится более предсказуемое.
    Например у нас есть какой-то блок(или элемент, не важно) .box__item и мы хотим первому добавить отступ слева, например так:
    .box__item:first-child {
        margin-left: 10px;
     }

    Все весело и прикольно пока нам не понадобилось переопределять стили... К примеру нам надо на экране выше 720px задать всем box__item одинаковые отступы:
    @media (min-width: 720px) {
    .box__item {
        margin-left: 20px;
     }
    }

    И тут то и начались проблемы, специфичность первого .box__item повышена и простой класс его не переопределит, первый блок так и останется с 10-ю пикселями, теперь нужно либо повысить специфичность всех .box__item, либо к каждому переопределению .box__item цеплять :first-child
    .box__item,
    .box__item:first-child {
        margin-left: 20px;
     }

    Уже не так красиво? Конечно тем кто привык к вложенным селекторам это кажется обычным делом, но значит они еще не вкусили всего кайфа БЭМ, когда ты переопределяешь что хочешь и где хочешь не ожидая подвоха.
    Простой модификатор может легко решить эту проблему и следующее переопределение .box__item без подводных камней задаст именно те стили какие мы хотели, можно даже не задумываться о том, что что-то пойдет не так
    Ответ написан
    4 комментария
  • Как в PropTypes обозначить необязательный параметр?

    vovaspace
    @vovaspace
    Frontend Engineer
    DateField.propTypes = {
      // Необязательные
      propA: pt.string,
    
      // Обязательные
      propB: pt.string.isRequired,
    };
    Ответ написан
    Комментировать
  • Что нужно выучить, чтобы удаленно фрилансить бухгалтером?

    opium
    @opium
    Просто люблю качественно работать
    Бухгалтер в офисе по обязанностям ничем не отличается от бухгалтера нам фрилансе
    Ответ написан
    Комментировать
  • Как грамотно разобраться во front-end?

    @n1ksON
    мидл
    Не совсем понятно, что вы хотите, мотивацию получить?
    Чтобы не сдуться и не застопориться, посмотрите на зарплаты программистов.

    Вот roadmap front-end разработчика.

    Учитесь, вы ещё в самом начале своего пути. Если вы стопоритесь на верстке, задумайтесь, нужно ли вам оно вообще? Если нужно, тогда идите и учитесь. А если нет, то на нет и суда нет.
    Ответ написан
    1 комментарий
  • Почему не отображается шрифт в браузере chrome iphone от 13 версии?

    jun_dev
    @jun_dev Автор вопроса
    Frontend-developer
    Выяснил причину )
    Удалил local !

    Вот ещё доп инфа )
    https://twitter.com/googlefonts/status/13233630909...
    Ответ написан
    Комментировать
  • Как расшифровать этот медиа запрос?

    @thereal_kh
    Более менее опытный фронт-энд разработчик.
    На ширине МЕНЬШЕ 1200 пикселей включительно font-size будет 40px, начиная с 1201 включительно 60px
    Ответ написан
    1 комментарий
  • Как работодатели в Москве относятся к отсутствию военного билета?

    Zoominger
    @Zoominger
    System Integrator
    Если устраиваетесь официально, то не оформят.
    Ни в Москве, ни в Николаевке, ни программиста, ни уборщицу.

    Остаётся только неофициальный вариант.
    Ответ написан
    7 комментариев