Задать вопрос
  • Писать типы вначале или рассчитывать на вывод типов компилятором?

    Никакой религии в этом вопросе нет и быть не может. Есть вполне конкретные правила, когда писать типы весьма полезно.

    Если вы НЕ указываете тип, и рассчитываете на автовывод, то значит вам нужен не какой-то конкретный тип, а ТАКОЙ ЖЕ, КАК И... где-то ещё. Например, такой-же-как тип константы или такой-же-как тип возвращаемого значения функции. Иными словами, если я пишу:
    const id = findIdByName("abc");
    то мне не так важно, какой конкретно тип будет иметь id, мне важно чтобы это был тип возвращаемого значения функции "findIdByName". Для меня это приоритетно. Более того, если в какой-то момент тип возвращаемого значения у этой функции поменяется, то этот код продолжить компилироваться и, вероятно, даже РАБОТАТЬ (это зависит уже от того, что мы потом собираемся делать с id).

    Совершенно противоположная ситуация - интерфейсы. В широком смысле. Интерфейсы функций, интерфейсы классов, интерфейсы в смысле типов данных, создаваемых с помощью "interface". Особенно если эту функцию/класс/интерфейс использует много кто ещё. Тогда наоборот, вам НЕЛЬЗЯ допустить, чтобы типы параметров или тип возвращаемого значения просто так поменялись. Это вдвойне важно, если вы пишите библиотеку и речь идёт о её публичном интерфейсе - любое изменение интерфейса тогда должно подкрепляться версионированием (например, семантическим). Вы не можете просто так, тем более по недосмотру, вместо числа начать возвращать из функции строку - вы сломаете ваших клиентов, причём даже не знаете как и где.
    Ответ написан
    Комментировать
  • В чём разница в работе .then() у двух промисов?

    GlazOtca
    @GlazOtca
    Не в бровь, а в глаз!
    Представьте, что вместо консольлога вы передаете функцию fn
    Теперь, смотрите:
    1
    .then(fn())
    2
    .then(()=>{fn()})
    Понятна ошибка? В первом случае нужно было передать указатель на функцию, а мы её сразу вызвали fn(), правильнее было так:
    .then(fn)
    То же самое происходит и с консольлогом.
    Ответ написан
    1 комментарий
  • Как добавить в todo лист дефолтные дела?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    Добавьте к функции createTodoApp третий опциональный аргумент

    Там уже 3 аргумента. А вообще это некрасиво, когда приносят свои задания, а это именно задание.
    Ответ написан
    Комментировать
  • Как написать подобный функционал на node js (express)?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    node.js и express тут не причем, а вот что при чем - так это БД, а Вы не указали, какую БД используете.
    В большинстве БД, которые умеют unique, используют для этого индексы, а индексы можно строить не только по 1 полю, но и по группе полей. В вашем случае unique index должен состоять из двух полей - user_id и task_id, что сделает их уникальными именно в паре.

    P.S. мне кажется не очень хорошая идея давать юзеру самому задавать id, особенно для тех сущностей, что юзер может создавать более одной.
    Ответ написан
    Комментировать
  • Как достовлять проджект на тест, на прод и к чертовой матушке?

    BorLaze
    @BorLaze
    Java developer
    три ветки в гите - дев, тест и мастер
    CI/CD

    вся локальная разработка базируется на ветке дев

    как только фича закончена, мержим ее в тест
    CI/CD настроен так, что по новому пушу в тест он выкладывает новую ветку на сервер
    тестируем ее на тест-сервере

    когда фича протестирована, мержим ее в мастер
    CI/CD настроен так, что по новому пушу в мастер код выкладывается на прод

    начинаем цикл по-новой
    Ответ написан
    Комментировать
  • Почему в useState не приходит значение? Ассинхронщина?

    Alexandroppolus
    @Alexandroppolus
    кодир
    в useState приходит statusText, но useState запоминает его только первый раз, при создании компонента. После чего есть два статуса - тот, который в useState, и тот который в редуксе. И они никак не взаимодействуют между собой. Т.е. когда getStatusThunk обновляет статус в редуксе, статусу состояния на это пофиг.
    Тут надо определиться - либо юзать только редуксовый статус, либо синхронизировать их между собой. Зависит от задачи.
    Ответ написан
    2 комментария
  • Как заставить svg взаимодействовать с onMouseMove?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Для движения лучше менять атрибут transform группы со зрачком.
    Маской сделать видимость зрачка только внутри формы глаза.

    CSS правила обычных HTML-элементов для элементов SVG не работают.
    Ответ написан
    1 комментарий
  • Почему появляется бесконечный цикл в моем коде?

    Alexandroppolus
    @Alexandroppolus
    кодир
    Судя по всему, ошибка выскакивает в каком-то другом, классовом компоненте.
    Здесь вижу такую проблему: window.location меняется в рендере, что совсем неправильно. Это должно происходить в useEffect
    useEffect(() => {
      window.location = location.pathname + '#' + lang;
    }, [location.pathname, lang]);
    Ответ написан
    2 комментария
  • Почему присылает профиля всех хотя указанно where user_id?

    Vindicar
    @Vindicar
    RTFM!
    1. Потому что условие "WHERE {user_id}" будет истинным для любых ненулевых user_id. Тебе нужно условие WHERE id = {user_id} (предполагая, что колонка с id пользователя называется id).
    2. С поправкой на то, что это тебе на самом деле не нужно. НИКОГДА не создавай запросы через подстановку значения в строку, слишком легко ошибиться или поймать sql-инъекцию. Перепиши запрос на использование prepared statements.
    cursor.execute("SELECT money, biz, profitbiz, profitkaz, losemoneykaz, moneykaz FROM users WHERE id = ?", (user_id, ))
    Вместо каждого ? в запросе будет подставлен элемент из кортежа параметров. При этом движок сам позаботится о правильном экранировании.
    3. Переподключаться к БД каждый раз при вызове команды - плохая идея. Создай подключение при запуске бота и используй его. Максимум - создавай новый cursor для вызова команды.
    Ответ написан
    1 комментарий
  • Когда в проекте лучше исользовать для сбокри gulp, а когда webpack?

    verkhoturov
    @verkhoturov
    Frontend Developer
    Если очень коротко:
    Gulp - когда нужно сделать просто верстку и немного js.
    Webpack - когда нужно сделать веб-приложение.

    Тема холиварная и поднималась уже много раз
    Отличия webpack и gulp?
    Зачем нужен Gulp/Webpack?
    Чем webpack лучше gulp/grunt?
    Ответ написан
    Комментировать
  • Почему не срабатывает селектор смежных элементов?

    @cheeroque
    Потому что он работает только вперёд.
    Ответ написан
    Комментировать
  • Как словить событие mouse2?

    fallus
    @fallus
    https://developer.mozilla.org/en-US/docs/Web/API/E...

    document.body.addEventListener('contextmenu', e => {
      e.preventDefault();
    });
    Ответ написан
    Комментировать
  • Как сделать ответ на неизвестный метод?

    alex4answ
    @alex4answ
    405

    Код состояния протокола HTTP 405 Method Not Allowed, указывает, что метод запроса известен серверу, но был отключен и не может быть использован. Два обязательных метода GET и HEAD никогда не должны быть отключены и не должны возвращать этот код ошибки.

    Сервер ОБЯЗАН сгенерировать поле заголовка Allow в ответе с кодом 405, которое содержит список текущих доступных методов ресурса.

    P.S. разве express не реализует это из коробки?
    Ответ написан
    Комментировать
  • Почему возвращается пустой объект?

    SagePtr
    @SagePtr
    Еда - это святое
    Потому что смешиваете синхронный и асинхронный код, вероятнее всего.
    Если асинхронные функции дёргать из синхронных, то получите не их результат, а промис.
    Ответ написан
    Комментировать