Задать вопрос
Ответы пользователя по тегу JavaScript
  • Как реализуется enum в JS из Typescript?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Можете, пожалуйста, объяснить, что выполняет эта часть кода: (Membership || (Membership = {})
    Если в Membership не falsy значение (например объект), то передать ссылку на него в функцию, иначе (если в Membership undefined) присвоить в Membership новый объект и передать ссылку на него в функцию

    И почему это всё обёрнуто в функцию?
    Сложно сказать, думаю кто-то скопировал код отсюда в код сюда и не стал париться, так как в обоих случаях есть declaration merging, о котором уже написал Aetae

    А вообще стоит узнать про const enum, который не оставляет артефактов в JS и в подавляющем большинстве случаев его достаточно.
    Ответ написан
    Комментировать
  • В чем разница между pdf.js и pdfjs-dist?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    но зачем скомпилированную версию называть отдельным именем и выделять под нее отдельный репозиторий
    dist репозиторий может автоматически разворачиваться на CDN через CI или push-хук, при этом в нем нет исходников и на него может быть ограниченный доступ на запись, а в репо с исходниками нет артефактов сборки. Кроме того можно быстро откатить кривой релиз через revert.
    Ну и у github нормальный CI появился относительно недавно, и старые проекты вполне могут использовать такую схему.

    Что-то я не пойму в чем разница между pdf.js и pdfjs-dist?
    В одном лежат исходники, в другом собранные бандлы.

    Правильный вариант - это или подключать собранный бандл с CDN или ставить с npm и собирать самому.
    Ответ написан
  • Как зациклить setTimeOut?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    const preloadImages = document.querySelectorAll('.pr-bub');
    const preloadImagesAnimationInterval = setInterval((state) => {
        const item = preloadImages[state.index];
        item.classList.toggle('animationPreBub', state.addClass);
        state.index--;
        if (state.index < 0) {
            state.addClass = !state.addClass;
            state.index = preloadImages.length - 1;
        }
    }, 300, {
        addClass: true,
        index: preloadImages.length - 1,
    });
    Ответ написан
    3 комментария
  • Являются ли промисы асинхронными?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    new Promise(resolve => {
      // здесь код выполняется синхронно
      resolve();
    }).then(() => {
      // здесь уже асинхронно, в ближайшем микротаске после вызова resolve выше
    });
    
    Promise.resolve().then(() => {
      // здесь тоже асинхронно, в ближайшем микротаске
    });


    много вычислений
    Это не про асинхронность.
    Асинхронность - это про кооперативную многозадачность, то есть промис может только отложить вычисления на потом, но они все равно заблокируют поток, который у JS всего один.
    А для "много вычислений" без блокирования основного потока, эти "много вычислений" нужно выносить в отдельный поток. В JS для этого есть воркеры. А вот уже результат от воркера можно ждать асинхронно.
    Ответ написан
    Комментировать
  • Почему не работает child_process electron?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Скорее всего проблема с путями для 'easyvk.js'.
    Во-первых, лучше всегда вычислять абсолютный путь до файла.
    Во-вторых, electron-packager пакует приложение в asar, и если require пропатчен для работы с ним, то child_process скорее всего нет и нужен анпакинг файла перед запуском.
    Ответ написан
  • Вопросы по REST API?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Во-первых, REST - это не стандарт, не строгие правила, это рекомендации.
    Вся суть этих рекомендаций сводится к двум вещам:
    - Каждый ресурс (документ, данные о сущности) имеет свой собственный URI
    - Для каждого действия с ресурсом предлагается в соответствие свой HTTP метод запроса

    Теперь по вопросам:
    1. Если данные json и html - это просто разные представления одного ресурса, то они вполне могут жить на одном URI. Например разное представление отдается в зависимости от HTTP заголовка Accept.
    2. REST никак не регламентирует, как Вам строить приложение. Это может быть отдельный запрос к сущности "роль" или быть частью сущности "пользователь", решать Вам.
    3. Опять же, REST тут вообще не причем. В REST нет никаких БД, сессий или еще чего либо, что Вы там под капотом используете инкапсулировано от клиента.
    4. CSRF делается как и в любом другом случае. Вот статья есть: https://habr.com/ru/post/318748/
    Ответ написан
    4 комментария
  • Почему не происходит перерисовка в самописном react-redux?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    state.firstname = action.payload.firstname;тут Вы мутируете предыдущий стейт, что потенциально может привести к невозможности сравнить стейты.

    reducer(state, action);возвращаемый стейт никуда не записывается

    callback();А вот тут может быть потенциально ошибка, так как callback может быть undefined
    Ответ написан
    1 комментарий
  • Как изменить значение обьекта на имя?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Object.keys(object[key]) = newobject[key];
    Вот на этой строчке у Вас ошибка, в JS нельзя присвоить что-то любому выражению, только переменной или полю объекта.
    Ответ написан
    Комментировать
  • Почему в объекте Response нет самого ответа?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Промис возвращаемый fetch() не ждет завершения всего запроса, он резолвится когда получены все заголовки.
    На этом месте их можно обработать и решить что делать дальше, например читать json, текст или бинарные данные из тела, или вообще не обрабатывать тело и прервать запрос.
    Так же можно читать тело ответа в виде потока, как уже указал в своем ответе Надим Закиров

    Второй промис из response.text() и response.json() нужен чтоб дождаться считывания всего тела ответа, притом response.json() еще и позволяет браузеру парсить json из ответа потоково прямо во время скачивания, опять же не блокируя поток js/ui.
    Ответ написан
    5 комментариев
  • Как преобразовать curl с параметром --data в fetch с методом get?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Если данные передаются в url в виде GET параметров:
    const url = new URL('http://127.0.0.1:8000/api/feed/posts/');
    url.searchParams.append('page', 1);
    
    fetch(url, {
      headers: {
        Authorization: 'Token a96a3545bb566272f0fdfb405a0cccb7173da660',
      },
    });
    Ответ написан
    Комментировать
  • Как переписать промис через async/await?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Код на then ждет промис из wait, а код на await нет
    await wait(2);
    Ответ написан
  • Почему сообщения в консоль выводятся не по порядку массива?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Promise.all(arr.map(p => {
        const link = `http://195.112.117.82:5080/photo?tov_code_internet=${encodeURIComponent(p)}`;
        return new Promise(resolve => {
            $.get(link, resolve);
        });
    })).then(dataArr => {
        for (const data of dataArr) {
            const $obj = $(data);
    
            const content = $obj[19].innerHTML;
            const title =   $obj[7].innerText;
    
            // по хорошему регулярки надо вынести наверх,
            // чтобы они компилировались 1 раз
            const text = content
                .replace(/[\n\r]/g, ' ')
                .replace (/\s{2,}/g, ' ');
    
            console.log(text + " " + title);
        }
    }).catch(err => {
        console.error(err);
    });
    Ответ написан
    Комментировать
  • Как решить проблему с WebSockets?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Вы на каждый запрос по http, который обрабатывается Вашим middleware делаете подписку на websocket connection, тем самым плодите обработчики.
    У Вас вебсокет вообще никак не связан с http и сидит на отдельном порту.

    При желании, кстати можно переиспользовать инстанс http сервера и для express и для websocket, тогда они на одном порту будут.
    Ответ написан
    3 комментария
  • Почему ошибка Uncaught TypeError: Failed to construct 'URL': Invalid URL?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    const network = "http://localhost:8899";для solana-test-validator
    Или URL реальной сети, в которой крутится нужная программа, если продакшен
    Ответ написан
    Комментировать
  • Можно ли реализовать такое с помощью js?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Можно.

    Вариант 1: зашить html код блока строкой в JS и вставлять через DOM операции в страницу, например через insertAdjacentHTML.

    Вариант 2: использовать шаблонизаторы, такие как handlebarsjs, по сути то же, что и вариант 1, но еще и позволит просто подставлять данные в HTML.

    Вариант 3: использовать UI фреймворк или библиотеку, такие как svelte, vue или react.

    Ну и маленький совет, если у Вас будет отдельный скрипт, который чисто выводит Ваш header на страницу, то подключать его можно прямо в месте расположения header, но подключать его нужно с атрибутом async, что бы он не мешал загрузке остальной страницы. И вставлять HTML код в этом случае можно относительно тега script, получить который можно через document.currentScript
    Ответ написан
    Комментировать
  • Запутался в изучении JavaScript. С чего начать?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Ни одна книжка или видео курс не позволит Вам освоить язык программирования. Хорошие книжки или видео курсы помогут усвоить хорошие практики, но только когда Вы уже что-то умеете. Притом без базовых знаний невозможно отличить хорошие книгу/курс от полностью отвратительных.

    Придумайте проект, который был бы полезен лично Вам или кому-то из близких/друзей/знакомых, и который Вам было бы интересно сделать. И просто начните его делать, гугля каждый раз, когда не знаете как сделать ту или иную вещь, а если не получается ничего нагуглить, то можно задать вопрос здесь. В начале Вы будете гуглить на каждый чих, это нормально. Но чем ближе Ваш проект будет к рабочему состоянию, тем реже Вам придется гуглить. Кроме того, если сразу делать такой проект фиксируя все изменения в git и выкладывая на githab, это сильно Вас выделит при поиске первой работы среди тысяч других новичков, но с проектами с курсов под копирку.
    Ответ написан
  • Как дождаться загрузки iframe который формируется javascript?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Ответ написан
    Комментировать
  • В чем моя ошибка stepik?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    произведение элементов массива
    let p = 1;
    // в цикле:
    p *= arr[i];


    кратных 3
    n % 3 === 0

    оканчивающихся на 5
    n % 10 === 5

    если таких элементов нет
    в общем случае делается введением флага:
    let hasElements = false;
    
    if (/* ... */) {
      hasElements = true;
    }
    Но конкретно в этом случае, так как 1 гарантированно не попадает под условия, а все остальные числа изменят произведение, можно проще p !== 1

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