Ответы пользователя по тегу JavaScript
  • Как прервать 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); // сбрасываем таймаут в любом случае, чтобы не перегружать систему
          }
        }
    Ответ написан
    Комментировать
  • Как сделать таймер обратного отсчёта на 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*/
    Ответ написан
    Комментировать
  • Почему не срабатывает 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;
    }

    Вот так
    Ответ написан
    Комментировать
  • Нужна помощь с 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();
        }
      }
    Ответ написан
    Комментировать