Я не могу понять 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,
консоль перерисовывается уже после choicesInit, и показывает обновленный select на 23 строке сделай console.log(holidaySelectDay.className); тогда будет видно, что класса нет. |
Цитата:
https://jsfiddle.net/gns6q3kv/2/ Если вставить скопированный селект, то он вставляется уже с классом, скрытый и т.д - его уже обработала библиотека |
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/ |
Часовой пояс GMT +3, время: 05:31. |