Задать вопрос
  • Компилирование ts в js на node js?

    mmmaaak
    @mmmaaak
    Возьми webpack, позаимствуй конфиг отсюда, npm build будет собирать все в ./build/bundle.js
    Ответ написан
    1 комментарий
  • Для каких случаев используются forEach и for of?

    0xD34F
    @0xD34F Куратор тега JavaScript
    Чтобы задать подобный вопрос, надо не знать, что такое forEach и for...of. Откройте документацию и разберитесь.

    UPD. Что, никак? Ну вот вам тогда несколько моментов:

    Выполнение forEach нельзя прервать (throw не в счёт), в то время как в теле for...of можно использовать break и return (да, в forEach тоже можно использовать return, но эффект будет не тот - уход на следующую итерацию, т.е., то же, что и continue для for...of).

    В forEach можно назначать контекст выполнения (через второй параметр, коллбек при этом не должен быть стрелочной функцией).

    Не удастся заставить forEach отложить запуск следующей итерации до окончания выполнения асинхронных операций, запущенных в текущей итерации. В случае for...of можно добавить async в объявление функции, внутри которой он находится, и использовать await.

    Если в прототипе объекта есть Symbol.iterator, то это ещё не означает, что и forEach там тоже присутствует. Впрочем, тут могут быть варианты одолжить чужой forEach:

    Array.prototype.forEach.call('ABC', alert);
    NodeList.prototype.forEach.call(document.scripts, console.log);

    Дальше сами думайте, где что предпочтительнее будет использовать.
    Ответ написан
    2 комментария
  • Как прокинуть данные наверх в node js?

    @Che603000
    c 2011 javascript
    Общий подход
    app.get('/', (req, res, next) => {
      sendHttpRequest(num1, num2)
        .then(data => anyFetch1(url))
        .then(data => anyFetch2(url))
          ....
        .then(data => res.json(data))  // ответ клиенту
        .catch(err => next(err)) // ошибка 
    .then
    }))


    sendHttpRequest и каждый anyFetch- должен возвращать промис.

    P.S.
    У вас возврата нет в коде
    return await fetch(id, param) // return !!!
             .then((response: any) => response.json())
                .then(data => {
                  return  checkFiles(id, data); // return надо ставить 
                })
    Ответ написан
    Комментировать
  • Какие есть ресурсы по выполнению тестовых заданий на поиск уязвимостей?

    syamskoy
    @syamskoy
    Задачки по взлому: https://www.hackthebox.eu/ Что бы зарегистрироваться, тоже нужно хакнуть регистрацию ;)
    Ответ написан
    2 комментария
  • Чем отличаются импорты компонентов во Vue?

    Xuxicheta
    @Xuxicheta
    инженер
    По втором случае Layout будет помещен в отдельный файл и загрузится при надобности.
    Читать тут
    Ответ написан
    Комментировать
  • Чем отличаются импорты компонентов во Vue?

    Kozack
    @Kozack Куратор тега JavaScript
    Thinking about a11y
    Первый случай — традиционный импорт. Второй — динамиический (отложенный) импорт.

    В случае WebPack это означает что:
    1. Файл layouts/Layout войдёт в состав общей сборки
    2. Файл layouts/Layout и все его зависимости будут вынесены в отдельный файл


    Конкретно во Vue это означает:
    1. Файл Компонента layouts/Layout будет загружен сразу,
    2. Файл компонента будет загружен только после того как компонент Layout понадобится.


    Вот ссылки для изучения:
    https://developer.mozilla.org/ru/docs/Web/JavaScri...
    https://learn.javascript.ru/modules-dynamic-imports

    Очень хороший доклад на эту тему:
    https://www.youtube.com/watch?v=5nr8zLo9hAg
    Ответ написан
    Комментировать
  • Как импортировать правильно запрос graphql на node js?

    @twolegs
    Для gql можно не тащить весь Apollo, достаточно подключить пакет graphql-tag.
    Чтобы привести это все к строке можно сделать так:
    import { print } from 'graphql/language/printer'
    
    console.log(print(query))
    Ответ написан
    Комментировать
  • Как импортировать правильно запрос graphql на node js?

    notiv-nt
    @notiv-nt
    Как ваше ничего? Да, моё тоже
    Импортировать схему, взять из неё source и отправить запрос
    5e2f038da2b8e715964848.png

    const gql = require('graphql-tag');
    const { print } = require('graphql/language/printer');
    
    const a = gql`
      query($name: String) {
        users {
          name
        }
      }
    `;
    
    // то же самое
    console.log(print(a));
    console.log(a.loc.source.body);
    Ответ написан
    Комментировать
  • Ошибка при импорте на node js?

    bingo347
    @bingo347 Куратор тега Node.js
    Crazy on performance...
    поменяйте "module": "CommonJS" в tsconfig
    Ответ написан
    3 комментария
  • Какой фреймворк JS выбрать для изучения?

    Zoominger
    @Zoominger
    System Integrator
    Меня призвали и я не могу разочаровать своих поклонников.

    Посоветуйте, что изучать для трудоустройства или выхода на фриланс?

    Изучайте вождение для работы таксистом, получите медкнижку для работы в Макдональдсе. Вот эти все фреймворки, ЖиЭсы, вот это всё ну никак не вяжется с "быстро и стабильно заработать", вы гораздо быстрее и больше заработаете, собирая бутылки.
    Ответ написан
    8 комментариев
  • Реально ли такое на лендинге?

    @n1ksON
    мидл
    Заходите на фриланс --> находите хорошего JS-программиста --> пишите задачу --> получаете решение.
    Ответ написан
    3 комментария
  • Как рекурсивно преобразовать объект в xml?

    0xD34F
    @0xD34F Куратор тега JavaScript
    const createXML = obj => Object
      .entries(obj)
      .map(([ k, v ]) => `<ns1:${k}>${v instanceof Object ? createXML(v) : v}</ns1:${k}>`)
      .join('');

    UPD. Если нужны переносы строк и отступы, то

    const createXML = (obj, tabSize = 2, depth = 0) => {
      const indent = ' '.repeat(tabSize * depth);
      return Object.entries(obj).map(([ k, v ]) =>
        indent +
        `<ns1:${k}>${
          v instanceof Object
            ? `\n${createXML(v, tabSize, depth + 1)}\n${indent}`
            : v
        }</ns1:${k}>`
      ).join('\n');
    };
    Ответ написан
    Комментировать
  • Как рекурсивно преобразовать объект в xml?

    Robur
    @Robur
    Знаю больше чем это необходимо
    Теряется потому что вы его никуда не добавляете - просто начинаете обрабатывать ключи
    {
            xml += `<ns1:${key}>${value instanceof Object ? parseXML(value) : value }</ns1:${key}>`
     }
    Ответ написан
    3 комментария
  • Как подставить имя класса под массив?

    @StockholmSyndrome
    const data = {
      firstbox: ["-16","13"], 
      secondbox: ["-10","11"]
    };
    
    $('.box').mousemove(function() {
      const [x, y] = data[this.classList[1]];
      gsap.to($(this), 1, {x, y});
    });
    Ответ написан
    4 комментария
  • Как оптимизировать Promise?

    yarkov
    @yarkov Куратор тега JavaScript
    Помог ответ? Отметь решением.
    https://developer.mozilla.org/ru/docs/Web/JavaScri...


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

    0xD34F
    @0xD34F Куратор тега Vue.js
    Плохо:

    <div class="color-label red" @click="color = '#FB253E', textColor = '#ffffff' , strokeColor = '#ffffff';"></div>
    <div class="color-label green" @click="color = '#19AD6A' ,textColor = '#ffffff' , strokeColor = '#ffffff';"></div>
    <div class="color-label orange" @click="color = '#FC6621' ,textColor = '#ffffff' , strokeColor = '#ffffff';"></div>
    <div class="color-label blue" @click="color = '#1386a3' ,textColor = '#ffffff' , strokeColor = '#ffffff';"></div>
    <div class="color-label yellow" @click="color = '#FFED00' ,textColor = '#111111' , strokeColor = '#111111';"></div>
    <div class="color-label lightgreen" @click="color = '#00ff00' ,textColor = '#111111' , strokeColor = '#111111';"></div>
    <div class="color-label white" @click="color = '#ffffff' ,textColor = '#111111' , strokeColor = '#111111';"></div>

    Лучше:

    <div
      v-for="n in colors"
      :class="[ 'color-label', n.name ]"
      @click="onColorClick(n.values)"
    ></div>

    data: () => ({
      colors: [
        { values: [ '#FB253E', '#FFF', '#FFF' ], name: 'red' },
        { values: [ '#19AD6A', '#FFF', '#FFF' ], name: 'green' },
        { values: [ '#FC6621', '#FFF', '#FFF' ], name: 'orange' },
        { values: [ '#1386A3', '#FFF', '#FFF' ], name: 'blue' },
        { values: [ '#FFED00', '#111', '#111' ], name: 'yellow' },
        { values: [ '#00FF00', '#111', '#111' ], name: 'lightgreen' },
        { values: [ '#FFFFFF', '#111', '#111' ], name: 'white' },
      ],
      ...
    }),
    methods: {
      onColorClick([ color, textColor, strokeColor ]) {
        Object.assign(this, { color, textColor, strokeColor });
      },
      ...
    },


    Плохо:

    <tspan x="0" y="-10" text-anchor="middle" alignment-baseline="middle" font-family="'Swiss721BT-RomanCondensed'" :style="{ 'font-size': firstLineFontSize }">{{ firstLine }}</tspan>
    <tspan x="0" y="17" text-anchor="middle" alignment-baseline="middle" font-family="'Swiss721BT-RomanCondensed'" :style="{ 'font-size': secondLineFontSize }">{{ secondLine }}</tspan>
    <tspan x="-2" y="45" text-anchor="middle" alignment-baseline="middle" font-family="'Swiss721BT-RomanCondensed'" :style="{ 'font-size': thirdLineFontSize }">{{ thirdLine }}</tspan></text>
    ...
    <input type="text" placeholder="enter 1 text line" @input="changeFirstLine">
    <input type="number" value='25' @input="changeFirstLineFontSize"><span> px </span>
    <input type="text" placeholder="enter 2 text line" @input="changeSecondLine">
    <input type="number" value='18' @input="changeSecondLineFontSize"><span> px </span>
    <input type="text" placeholder="enter 2 text line" @input="changeThirdLine">
    <input type="number" value='18' @input="changeThirdLineFontSize"><span> px </span>

    data: {
      firstLine: 'Your',
      secondLine: 'custom',
      thirdLine: 'text',
      firstLineFontSize: '25',
      secondLineFontSize: '18',
      thirdLineFontSize: '18',
      ...
    },
    methods: {
      changeFirstLine: function(event) {
          this.firstLine = event.target.value;
      },
      changeSecondLine: function(event) {
          this.secondLine = event.target.value;
      },
      changeThirdLine: function(event) {
          this.thirdLine = event.target.value;
      },
      changeFirstLineFontSize: function(event) {
          this.firstLineFontSize = event.target.value;
      },
      changeSecondLineFontSize: function(event) {
          this.secondLineFontSize = event.target.value;
      },
      changeThirdLineFontSize: function(event) {
          this.thirdLineFontSize = event.target.value;
      },
      ...

    Лучше:

    <tspan
      v-for="n in lines"
      v-text="n.text || n.placeholder"
      :x="n.x"
      :y="n.y"
      :style="{ 'font-size': n.fontSize }"
      text-anchor="middle"
      alignment-baseline="middle"
      font-family="'Swiss721BT-RomanCondensed'"
    ></tspan>
    ...
    <template v-for="(n, i) in lines">
      <input type="text" v-model="n.text" :placeholder="`enter ${i + 1} text line`">
      <input type="number" v-model="n.fontSize"><span> px </span>
    </template>

    data: () => ({
      lines: [
        { x:  0, y: -10, fontSize: 25, placeholder: 'Your' },
        { x:  0, y:  17, fontSize: 18, placeholder: 'custom' },
        { x: -2, y:  45, fontSize: 18, placeholder: 'text' },
      ],
      ...
    }),
    Ответ написан
    Комментировать
  • Как перевести jQuery в чистый JS?

    0xD34F
    @0xD34F Куратор тега JavaScript
    А зачем делать отдельные запросы для каждого элемента? Достаточно одного общего - свойство Documents, оно же массив, можно сразу всё передать.

    document.querySelector('.allstatus-btn').addEventListener('click', () => {
      const items = Object.fromEntries(Array.from(
        document.querySelectorAll('.number-all'),
        n => [ n.innerText, n ]
      ));
    
      fetch('https://api.novaposhta.ua/v2.0/json/', {
        method: 'POST',
        body: JSON.stringify({
          modelName: 'TrackingDocument',
          calledMethod: 'getStatusDocuments',
          methodProperties: {
            Documents: Object.keys(items).map(n => ({
              DocumentNumber: n,
              Phone: '',
            })),
          },
          apiKey: '',
        }),
      })
        .then(r => r.json())
        .then(r => r.data.forEach(n => items[n.Number].innerHTML += n.Status));
    });
    Ответ написан
    Комментировать
  • Как правильно объединять объекты в JS?

    irishmann
    @irishmann
    Научись пользоваться дебаггером
    Комментировать