Разрабатываю в отделе рекламных технологий в Рамблере.
Контакты
Местоположение
Россия, Москва и Московская обл., Москва

Достижения

Все достижения (4)

Наибольший вклад в теги

Все теги (42)

Лучшие ответы пользователя

Все ответы (92)
  • Что значит плоский код?

    @afanasiyz
    Javascript-разработчик
    Код, который написан и читается, словно он вовсе не асинхронный (все вызовы друг за другом).

    пример из js
    const parseAdminsData = async ()=>{
      const token = await getToken();
      const users = await getUsers(token);
      const admins = users.filter(({isAdmin})=>isAdmin);
      return admins;
    }


    вот тут два асинхронных запроса, но в коде они выглядят просто как вызовы функций. (без колбэков)
    Ответ написан
    10 комментариев
  • Какие существуют стеки в Web API для выполнения асинхронных js операций?

    @afanasiyz
    Javascript-разработчик
    Отвечу насколько знаю (и насколько понял вопрос), вопрос отличный, Автор - молодец.

    1. Таймеры, xhr запросы, четыре вида Observers: Mutation, Intersection, Resize, Performance Observers. Другие варианты асинхронных операций сложно представить (могу ошибаться, и их еще куча).

    2. смотря про какие стэки мы говорим - если со стороны движка и Web API - понятия не имею, в какие стэки он это все засовывают, подозреваю, что в зависимости от движка разные реализации этих операций, и они по разному работают с памятью (тут нужны сишники, которые знают исходники движков браузеров). Если мы говорим про стэки в javascript - опять же, зависит от того, какой стэк вы имеете в виду - стэк вызовов, очевидно, сохраняется от той функции, которая вызвала нашу асинхронную функцию, по памяти, я думаю, все располагается в общем стэке (с изоляцией, конечно).

    3. Промисы попадают в microtasks queue - выполняются один за другим, пока не закончатся микрозадачи, чтобы перейти к макрозадаче. Остальные асинхронные операции попадают в tasks queue, и там работают одна за другой, прерываясь на исполнение микрозадач, если они появились.
    То есть по приоритезации - микрозадачи приоритетнее макрозадач, как только макрозадача кончилась, движок смотрит, есть ли микрозадачи, и выполняет их, и лишь потом переходит к следующей макрозадаче.
    Ответ написан
    Комментировать
  • Почему изменяется массив в функции?

    @afanasiyz
    Javascript-разработчик
    Любые не-примитивы в js передаются всегда по ссылке (массив один из них).
    Поэтому, чтобы не изменялся входящий массив, его надо склонировать.
    Меня тут наверное поправят, но по-моему в чистом js нет удобных способов склонировать вложенный массив без хаков, а хак тут будет:

    let Temp = JSON.parse(JSON.stringify(matrix));

    Или можно использовать lodash и его deepClone
    Ответ написан
    Комментировать
  • Насколько решение соответствует ТЗ(React)? Есть ли грубые ошибки?

    @afanasiyz
    Javascript-разработчик
    По коду кажется все ОК (никаких сильных претензий не возникает сходу), только по-моему пагинацию прикрутить вы забыли (она нигде не вызывается).

    UPD: претензии небольшие все таки есть, class Results:
    renderNoResultsMessage() {
        const { results, noResultsMessage } = this.props;
        if (results && !results.length && noResultsMessage) {
          return (<div className="no-result">
            <h3>
              {noResultsMessage}
            </h3>
          </div>);
        }
      }


    Кажется эта функция не очень то renderNoResults, она еще checkForResults, а только потом render - не надо так делать, по коду непонятно. функция, которая renderSMTH -должна только рендерить, без лишних проверок

    UPD 2 пагинацию увидел, с ней все ок.
    Ответ написан

Лучшие вопросы пользователя

Все вопросы (7)