Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 07.02.2020, 12:15
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Я не могу понять async и await. Объясните на моём примере
Песочница: https://jsfiddle.net/bqgy0p4v/

Есть селект. Его обрабатывает библиотека Choices.js. Я хочу скопировать в переменную этот селект до того, как его обработает библиотека (если селект обработала библиотека - она навешивает класс, убирает лишние option и скрывает select), но попросту не успеваю, а async и await мне в этом не может помочь. Видимо, я что-то делаю неправильно. Подскажите что не так.

JS:
let holidaySelectDay


function uselessFunction() { 
  return new Promise(resolve => {
      copyDiv()
      resolve(0);
  });
}

async function f1() {
  var x = await uselessFunction();
  choicesInit('select', {searchEnabled: false, shouldSort: false, itemSelectText: ''});
}

f1();

/* -------------------- */

/* Получаем селект, выводим его в консоль */
function copyDiv() {
  holidaySelectDay = document.querySelector("select");
  console.log(holidaySelectDay);
}

/* Инитим choices.js. Получаем селект и параметры */
function choicesInit(select, param) {
  const elements = Array.from(document.querySelectorAll(`${select}`))

  const item = elements.filter(function (elements) {
    if (!elements.getAttribute('data-choice')) { return elements }
  });
  const instances = item.map((element) => {
    return new Choices(element, param)
  });
}

Последний раз редактировалось CryNet, 07.02.2020 в 12:17.
Ответить с цитированием
  #2 (permalink)  
Старый 07.02.2020, 13:13
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

CryNet,

консоль перерисовывается уже после choicesInit, и показывает обновленный select

на 23 строке сделай console.log(holidaySelectDay.className);
тогда будет видно, что класса нет.
Ответить с цитированием
  #3 (permalink)  
Старый 07.02.2020, 13:30
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Сообщение от Alexandroppolus Посмотреть сообщение
CryNet,

консоль перерисовывается уже после choicesInit, и показывает обновленный select

на 23 строке сделай console.log(holidaySelectDay.className);
тогда будет видно, что класса нет.
Дело не в этом

https://jsfiddle.net/gns6q3kv/2/

Если вставить скопированный селект, то он вставляется уже с классом, скрытый и т.д - его уже обработала библиотека
Ответить с цитированием
  #4 (permalink)  
Старый 07.02.2020, 13:38
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

CryNet,
копию сделайте до изменения а не после
async function f1() {
  var x = await uselessFunction();
  holidaySelectDay = holidaySelectDay.outerHTML
  choicesInit('select', {searchEnabled: false, shouldSort: false, itemSelectText: ''});
  
  let di = document.querySelector("body")
  
	di.insertAdjacentHTML('afterbegin', holidaySelectDay)
}
Ответить с цитированием
  #5 (permalink)  
Старый 07.02.2020, 13:57
Профессор
Отправить личное сообщение для CryNet Посмотреть профиль Найти все сообщения от CryNet
 
Регистрация: 02.01.2019
Сообщений: 151

Сообщение от Alexandroppolus Посмотреть сообщение
CryNet,

консоль перерисовывается уже после choicesInit, и показывает обновленный select

на 23 строке сделай console.log(holidaySelectDay.className);
тогда будет видно, что класса нет.
Сообщение от рони Посмотреть сообщение
CryNet,
копию сделайте до изменения а не после
async function f1() {
  var x = await uselessFunction();
  holidaySelectDay = holidaySelectDay.outerHTML
  choicesInit('select', {searchEnabled: false, shouldSort: false, itemSelectText: ''});
  
  let di = document.querySelector("body")
  
	di.insertAdjacentHTML('afterbegin', holidaySelectDay)
}
Мдауж... туплю. Спасибо

https://jsfiddle.net/qLmeafcx/1/
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу понять принцип всего скрипта sonniksonnik Общие вопросы Javascript 11 19.11.2013 16:36
Наболевший this. Не могу понять Harvey Общие вопросы Javascript 6 19.08.2011 17:30
Не могу понять, почему не работает автокомпил в IE 8 gargon2008 jQuery 0 07.06.2011 11:31
RegExp - поиск в найденном. Не могу понять senseysensor Общие вопросы Javascript 9 17.10.2010 21:55
не могу понять в чём ошибка scuter Общие вопросы Javascript 2 28.08.2008 15:22