• Как прервать js запрос к серверу?

    @danilr Автор вопроса
    Promise.any не поддерживается в nodejs 12, поэтому решение через Promise.race:
    let timerId = 0; // вынес так как не знал как таймаут потом в каждой итерации сбрасывать
    
          try {
    
            const firstPromiseResult = await Promise.race([
              new Promise((resolve) => {
                timerId = setTimeout(()=> {
                  resolve('TIMEOUT')
                }, 1000 * 60 * 4) // время через которое мы идём дальше по циклу( тут его не видно(цикла))
              }),
              order(Id) // наш запрос к стороннему апи, тут без await т.к. зависает и проблема остаётся
            ]);
    
          }
          catch(e) {
            console.log('error_text:', e)
          }
          finally{
            clearTimeout(timerId); // сбрасываем таймаут в любом случае, чтобы не перегружать систему
          }
        }
    Ответ написан
    Комментировать
  • Какие настройки на сервере нужны для SPA?

    @danilr Автор вопроса
    Тут написана документация по VueRouter как раз по моему вопросу
    https://router.vuejs.org/guide/essentials/history-...

    В .htaccess добавить для редиректа на index.html
    <IfModule mod_rewrite.c>
      RewriteEngine On
      RewriteBase /
      RewriteRule ^index\.html$ - [L]
      RewriteCond %{REQUEST_FILENAME} !-f
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteRule . /index.html [L]
    </IfModule>
    Ответ написан
    Комментировать
  • Почему скрипт не работает при запуске через скрипт npm?

    @danilr Автор вопроса
    Решение!
    Действительно, npm вызывает для исполнения свои скриптов cmd или powershell, а нужен bash - для этого запускаем команду для изменение среды запуска
    npm config set script-shell "C:\\Program Files\\git\\bin\\bash.exe"

    Можно вернуть как было командой
    npm config delete script-shell
    Всем спасибо!)
    Ответ написан
    Комментировать
  • Как написать маску vue-inputmask для процентов?

    @danilr Автор вопроса
    Так как никто из здешних экспертов не смог разобраться с этим вопросом, долгими попытка пришёл один вариант.
    v-mask="{regex: '^([0-9]{1,2})([.,][0-9]{1,2})?$', placeholder: '', showMaskOnHover: false, showMaskOnFocus: false}"

    в атрибуты инпута, в методе обработчике input сделать следующее:
    const value = val.target.value.replace('.',',');
    Ответ написан
  • Как сделать таймер обратного отсчёта на JS?

    @danilr Автор вопроса
    Лучшее решение - это записать в константу в момент старта счётчика время, потом каждую секунду высчитывать время текущее и сколько осталось.
    const delay = 300000; // 300 секунд таймера (5 мин), статичное и не меняется
    const resentDelay = 30000; // начальное время остаточного времени счётчика и постоянно уменьшается:
    const timeStart = Date.now(); // время когда счётчик запустился (тип number в миллисекундах)
    const currentDelay = Math.round( (resentDelay - (Date.now() - timeStart))/1000 ); /* вычисляем оставшееся время счётчика, вычисление это делаем каждую секунду в  setInterval*/
    Ответ написан
    Комментировать
  • Как отловить событие открытие балуна на Яндекс картах и клик по элементу списка внутри?

    @danilr Автор вопроса
    Вот так:
    // узнаем текущий активный объект (сразу выбран в меню табов)
    const currentActiveObject = this.objectManager.clusters.state.get('activeObject');
    // создаем монитор и следим за полем 'activeObject' 
    this.activeObjectMonitor = new ymaps.Monitor(this.objectManager.clusters.state);
    this.activeObjectMonitor.add('activeObject', (newActiveObject) => {
        console.log(newActiveObject);
    }

    подсказка ответа тут https://yandex.ru/blog/mapsapi/55496
    Ответ написан
    Комментировать
  • Почему не срабатывает SetTimeout?

    @danilr
    Братан, твоя проблема в другом - ошибка в передаче параметров метода css. Во как надо:
    setTimeout(() => test.css("display", "none"), 2000);
    Ответ написан
    1 комментарий
  • Почему карта 2GIS не прогружается?

    @danilr Автор вопроса
    Проблема была в следующем, стили для img мешали.
    img {
      max-width: 100%;
      max-height: 100%;
    }
    Ответ написан
    Комментировать
  • Какая то проблема с кодировкой?

    @danilr Автор вопроса
    <!--у меня вариант ниже работает только-->
    <meta name="http-equiv" content="Content-type: text/html; charset=UTF-8">
    <meta charset="UTF-8">

    При объявлении скрипта
    <script src="" charset="utf-8"></script>
    В .htaccess
    AddCharset utf-8 .js
    Вместо utf8 устанавливайте свою кодировку.
    Ответ написан
    Комментировать
  • Почему не задаются стили при создании элемента?

    @danilr
    Нужно в ковычки 10 и 50 вставить, вот так:
    var img = document.createElement('img');
        img.src = 'http://ifndef.ru/s/1.png';
        img.id ='go';
        img.style.top='10%';
        img.style.left='50%';
        get.appendChild(img);

    Если это не проценты, а пиксели, то '10px'
    Ответ написан
  • Картинка повторяется в слайдере. Как исправить?

    @danilr
    Чтобы не дублировать в каждый child слайдера, лучше добавьте так
    .slide {
     background-repeat: no-repeat;
     background-position: center;
    }

    так будет Выглядеть
    Или второй вариант( как по мне - растягивать картинки - не лучший вариант):
    .slide {
     background-position: center;
     background-size: cover;
    }

    Вот так
    Ответ написан
    Комментировать
  • Как сделать положение элементов в строчку?

    @danilr
    лучше всего уже на флексах верстать:
    menu {
      display: flex;
    }
    Ответ написан
    5 комментариев
  • Нужна помощь с get и set?

    @danilr
    Надеюсь помог)
    get palletTasks(): Array<Object>{
        return this.scannedWare ?
          (this._palletTasks.filter(a => a['positions'].some(b => b['wares'].some(c => c['code'] === this.scannedWare['data']['code']))) ) :
          (this._palletTasks || []);
      }
    
      get replenishment_guid(): string {
        return this._replenishment_guid;
      }
      
      set palletTasks(data: Array<Object>) {
        this.selected = 0;
        const pallets: Object = {};
        data.forEach(dataValue => {
          dataValue['wares'].forEach(waresValue => {
            if (!pallets[waresValue['object']['palletBarcode']]) {
              pallets[waresValue['object']['palletBarcode']] = {
                positions: {},
                object: waresValue['object'],
                task: waresValue['task']['guid'],
                rest: 0,
                replenish: 0,
                selected: waresValue['object']['select'],
              };
              if (waresValue['object']['select']) {
                this.selected++;
              }
            }
            pallets[waresValue['object']['palletBarcode']]['positions'][dataValue['sale']['positionBarcode']] = {
              ...dataValue['sale'],
              wares: waresValue['wares'].sort((a, b) => b['emergency'] ? 1 : -1)
            };
            waresValue['wares'].forEach((waresItem) => {
              pallets[waresValue['object']['palletBarcode']]['rest'] += waresItem['rest'];
              pallets[waresValue['object']['palletBarcode']]['replenish'] += waresItem['replenish'];
            });
          });
        });
        this._palletTasks = Object.keys(pallets).map((palletKey) => {
          let wares_count = 0;
          let wares_emergency = 0;
          pallets[palletKey]['positions'] = Object.keys(pallets[palletKey]['positions']).map((positionKey) => {
            wares_count += pallets[palletKey]['positions'][positionKey]['wares'].length;
            wares_emergency += pallets[palletKey]['positions'][positionKey]['wares'].reduce(
              (acc, cur) => acc + (cur['emergency'] ? 1 : 0), 0);
            return pallets[palletKey]['positions'][positionKey];
          });
          pallets[palletKey]['count'] = wares_count;
          pallets[palletKey]['emergency_count'] = wares_emergency;
          return pallets[palletKey];
        }).sort((a, b) => b['emergency_count'] - a['emergency_count']);
        this.dictPallets = pallets;
        this._replenishment_guid = data[0]['wares'][0]['replenishment']['guid'];
      }
        ngOnInit() {
        this.parent.backButton = '/';
        this.parent.header = 'Пополнение: ' + this.localService.direction.name;
        this.rbs.setDownloadScreen();
        this.localService.getData().subscribe(
          (res: Object) => this.handleGetData(res),
          (err: any) => this.handleMessage(err)
        );
      }
    
      @ResponseHandle()
      private handleGetData(ans: Object): void {
        if (ans['rows'].length > 0) {
          this.palletTasks = ans['rows'];
          this.rbs.finalScreen();
        } else {
          this.handleMessage('Задачи отсутсвуют');
          this.parent.back();
        }
      }
    Ответ написан
    Комментировать