Ответы пользователя по тегу JavaScript
  • Приемлимо ли связывать два фронтенд микросервиса через шину сообщений со своим api сообщений?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Но у сервисов все равно выходит что будет зависимость от этой библиотеки с шиной сообщений, и завязка на это апи. Правильно ли это все?


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

    Robur
    @Robur
    Знаю больше чем это необходимо
    свойство можно передавать параметром вместе с array и писать a[prop] <b[prop]
    Ответ написан
    Комментировать
  • Как реализовать блоки в виде пазла?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Как проще реализовать подобные блоки?

    Простыми div с заливкой и позиционированием, это ж просто черные и белые прямоугольники. Если хотите красоты в коде - то блоками before, after, тегов меньше, суть та же.
    Ответ написан
    Комментировать
  • Конкатенация строк?

    Robur
    @Robur
    Знаю больше чем это необходимо
    нет

    ПС. но вы можете перед эти 'a' и 'b' сохранить в отдельные переменные, их сконкатенировать, но изначальные строки останутся в этих переменных
    Ответ написан
  • Как сохранять параметры пользователя при http basic auth?

    Robur
    @Robur
    Знаю больше чем это необходимо
    но чтобы обратиться к этому же роуту или другому нужно опять передавать заголовок авторизации

    Да, нужно. вот это и делайте.

    Можно сделать свою функцию для вызова апи которая будет каждый раз подставлять нужный заголовок в запрос.
    И уже везде в приложении использовать ее.
    Ответ написан
  • Как прописать отложенную функцию setTimeout?

    Robur
    @Robur
    Знаю больше чем это необходимо
    заверните весь этот код в setTimeout
    Ответ написан
    Комментировать
  • Колбэки асинхронны?

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

    Robur
    @Robur
    Знаю больше чем это необходимо
    как-то так

    направление мысли верное, теперь сделайте это.

    helpanite

    Давай! у тебя все получится!
    Ответ написан
  • Как удалить одного подписчика, если одинаковые имена?

    Robur
    @Robur
    Знаю больше чем это необходимо
    очевидно что для этого вам надо использовать что-то иное, чем имя.
    либо это ссылка на хендлер, тогда код будет вида emiter.off(event, handler)
    либо, как это делается много где, emiter.on() возвращает функцию - отписывалку, тогда будет
    const off1 = emiter.on('aaa', handler1)
    const off2 = emiter.on('aaa', handler2)
    off1()


    Например, как это сделано в Vue.
    В нем есть on и off

    в нем - первый вариант:
    https://github.com/vuejs/vue/blob/dev/src/core/ins...
    Ответ написан
    Комментировать
  • Какое внешнее лексическое окружение у анонимной функции, создаваемой при вызове другой функции в качестве ее аргумента?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Какое внешнее лексическое окружение у анонимной функции, создаваемой при вызове другой функции в качестве ее аргумента?


    такое же как у создаваемой в любых других условиях. например при `const x=() => {}` факт наличия вызова другой функции не играет никакой роли для привязки лексического окружения, в этом его смысл. так как функция стрелочная, this привяжется вместе со всем остальным контекстом.

    Во втором примере у вас нет стрелочных функций, поэтому this никуда не привязывается и определяется контекстом вызова sayHello, остальные переменные, если они будут - привязываются по общему принципу замыканий - лексического контекста

    const x=1
    console.log(this) //некий объект A
    doSomething( () => console.log(this, x))// this привязан, равен A, x привязан равен 1
    
    doSomething(function () { console.log(this, x)}) //this не привязан значение зависит от кода doSomething, x все так же привязан, равен 1
    Ответ написан
  • Функция валидации которая выбрасывает исключения?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Выглядит странно, ранее очень редко встречал такие конструкции,


    вполне себе нормально, assertSomething()
    даже в ноде в стандартной либе есть https://nodejs.org/api/assert.html#assert_assert_o...

    ваш if (cond) throw 'aaa' превращается в assert(cond, 'aaa'). Наглядно, понятно, в одну строчку. Ну или еще как вам будет удобнее.
    Ответ написан
    3 комментария
  • Как работает отрицание функции?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Непонятно, как в общем работает отрицание функций в JS

    никак, нет такого понятия "отрицание функции".

    функция вызовется, что-то вернет и к этому значению применится оператор "!"
    в данном случае функция возвращает true или false, соответственно будет if (!true) или if (!false). как это работает вы я думаю уже должны знать.
    по простому - в этом примере если вызов compareObjects для ключей объектов вернул false (свойства key в а и b не равны) то возвращаем false (объекты a и b тоже не равны)
    Ответ написан
    Комментировать
  • Почему возвращается Promise pending?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Почему возвращается Promise pending?

    потому что вы вызываете асинхронные функции которые возвращают промис, и в свою очередь возвращаете промис.

    Можно ли как-то избежать .then или await при использовании функции loadJSON?

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

    Хотите получить эти данные - пишите асинхронный код вокруг console.log тоже.
    console.log(await loadJSON()) например.
    чтобы работало надо чтобы это было внутри функции с async или включена поддержка top-level await.
    Ответ написан
    Комментировать
  • Как сделат localstorgate на http https?

    Robur
    @Robur
    Знаю больше чем это необходимо
    сейчас получается так что на http свое хранилище, а на https свое. как будто другой сайт.

    да, это разный origin со всеми вытекающими. Все равно что разные айпишники.

    Непонятно, если у вас уже есть https то в чем проблема его использовать в обоих вариантах?
    Ответ написан
  • Ошибка у одного, у другого все нормально, в чем проблема?

    Robur
    @Robur
    Знаю больше чем это необходимо
    unexpected token in json at position 0

    бывает когда сервер отдает не json ответ. вам надо как-то получить от других пользователей лог запроса и ответ сервера, тогда будет понятно что там происходит. Либо отловить это на стороне сервера
    Ответ написан
    Комментировать
  • Как создаются SPA с AJAX на чистом JS?

    Robur
    @Robur
    Знаю больше чем это необходимо
    как человек который написал большое SPA приложение на чистом js в далеком 2011, когда не было всяких реактов-ангуляров-вью-вебпаков-тайпскриптов, надеюсь что никак.

    Если вам хочется разобраться в архитектуре приложений - то не ищите spa на js, ищите книжки-статьи по архитектуре. разделение бизнес-логики от интерфейса, хранение стейта, общение с сервером, связность, модульность, вот это вот все. И посмотрите как устроены современные фреймворки, желательно все мейнстримовые, у них разные подходы.
    Можете еще посмотреть на extjs чтобы понять как делать не надо.
    Ответ написан
    Комментировать
  • Стоит ли отправлять ответы по веб сокету, если соединение уже установлено или лучше использовать rest?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Сразу же возникают проблемы

    Решение проблем - это необходимый навык.
    Отправляйте с запросом какой-нибудь id запроса, и в ответе его же возвращайте, и будут у вас и лоадеры и ошибки и promise.all и все остальное с небольшим колчеством усилий.
    Ответ написан
  • Как в moment js сделать так чтобы каждое число он мог преобразовать к возможному дню, месяцу, году?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Есть ли какой то метод в moment js если мы ему передадим формат YYYY.MM.DD он вернет нам 2001.Feb.03


    Есть для вашего примера будет 'YYYY.MMM.DD'
    Ответ написан
  • Как тут можно реализовать очистку формы?

    Robur
    @Robur
    Знаю больше чем это необходимо
    да, возможно. сразу после строчки if (json.result == "success") {
    добавляйте ваш код очистки.
    Ответ написан
  • Как на javascript замерить время выполнения функции (в наносекундах)?

    Robur
    @Robur
    Знаю больше чем это необходимо
    точное время выполнения одного вызова функции получить довольно сложно.

    во первых - performance.now возвращает дробное число, поэтому там в принципе может быть наносекундная точность. однако стандарт определяет что точность должна быть 5 микросекунд. Плюс браузеры могут специально занижать точность чтобы бороться с некоторыми атаками.

    поэтому правильно вызывать функцию много раз и считать среднее.
    так же в ноде есть process.hrtime которая дает наносекунды.

    оба этих метода "в лоб" не дадут нормального результата. Почему? потому что в реальности происходит много всего интересного при выполнении кода.

    в движке есть неимоверное количество оптимизаций, и функция вызванная 10 раз будет иметь совершенно другой код чем функция вызванная 100 раз. То же касается и типов параметров - например вы можете передавать целые или дробные числа.
    На одну вашу написанную js-функцию движок сгенерирует несколько функций которые это реализуют. У этих функций может быть совершенно разный код с разной произодительностью.

    Переключение происходит на лету и в общем виде вы не знаете когда это происходит.

    поэтому само по себе замерение скорости "функции" имеет мало смысла, так как там их несколько внутри. Если интересны детали - погуглите JIT, AOT и v8 optimizations.
    Сейчас важно то что есть "холодные" функции которые работают медленее но надеждее и как правило используются сразу и есть "горячие" варианты, которые компилятор начинает использовать когда видит что код вызван много раз, и условия не меняются. "Горячие" работают быстрее.

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

    зная это, код можно сначала разогреть а потом померять скорость. скорее всего на разогретом коде будет работать один и тот же вариант.

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

    И тут самый главный момент - даже если вы замерите эту скорость, что вы будете делать с этим знанием? В реальной программе при выполнении этого кода скорость может быть совсем не такая как вы намеряли. Эти тесты годятся только для своего общего развития

    На практике имеет смысл измерять скорость у функций которые выполняются намного дольше И там где это создает проблемы. погуглите термин "преждевременная оптимизация".
    В этом случае обычно понятно что создает задержки и измерить время работы одного вызова не составляет труда.
    Если же функция работат так быстро что вы не можете понять насколько именно, то вряд ли вам потребуется это выяснять.

    Для практических задач в браузере есть профайлер, если нужно выяснить что же тормозит в конкретном коде, правильнее всего начать с него.
    Ответ написан
    5 комментариев