// Async/Await Homework 2 // TrafficLight const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms)) let green = document.querySelector('#green') let yellow = document.querySelector('#yellow') let red = document.querySelector('#red') async function trafficLight() { while (true) { greenPlay() await delay(8000) yellowPlay() await delay(3000) redPlay() await delay(8000) yellowPlay() await delay(3000) } } function greenPlay() { remove() green.style.background = 'green' } function yellowPlay() { remove() yellow.style.background = 'yellow' } function redPlay() { remove() red.style.background = 'red' } function remove() { green.style.background = '' yellow.style.background = '' red.style.background = '' } trafficLight() // or // находим все классы // let circle = document.getElementsByClassName('circle') // // функция - счётчик counter // function counter(setCounterOne, setCounterTwo, classIndex0, classIndex1, classIndex2) { // // выводим счётчик // let timeoutId = setInterval(function () { // classIndex0.classList.add('circleBGColor1') // classIndex1.innerHTML = setCounterOne; // classIndex1.classList.add('circleColor1') // // очищаем счетчик и добавляем класс(желтый) // if(setCounterOne <= 3) { // classIndex1.innerHTML = '' // classIndex1.classList.add('circleBGColor2') // // мигание // setTimeout(function() { // classIndex0.classList.remove('circleBGColor1') // }, 500) // } // setCounterOne-- // // при достижении нуля останавливаем таймер и удаляем клас(желтый и красный) // if (setCounterOne == 0) { // clearInterval(timeoutId) // classIndex1.classList.remove('circleBGColor2', 'circleColor1') // classIndex0.classList.remove('circleBGColor1') // let timeId = setInterval(function() { // // добавляем класс(зелёный) // classIndex2.classList.add('circleBGColor3') // classIndex1.innerHTML = setCounterTwo // classIndex1.classList.add('circleColor2') // // добавляем второй счётчик // if(setCounterTwo <= 3) { // classIndex1.innerHTML = '' // classIndex1.classList.add('circleBGColor2') // // мигание // setTimeout(function() { // classIndex2.classList.remove('circleBGColor3') // }, 500) // } // // при достижении нуля останавливаем таймер и удаляем клас(желтый и зеленый) // if (setCounterTwo == 0) { // clearInterval(timeoutId) // classIndex1.classList.remove('circleBGColor2', 'circleColor3') // classIndex2.classList.remove('circleBGColor3') // } // // подготовка счётчика к новому циклу // if(setCounterTwo == 0) { // clearInterval(timeId) // classIndex1.classList.remove('circleColor2') // } // setCounterTwo-- // }, 1000) // } // },1000) // } // // функция - подсчет таймаутов // let totalCounter; // function sumTimeout(counterOne, counterTwo) { // let sumCounterOne = counterOne * 1000 // let sumCounterTwo = counterTwo * 1000 // totalCounter = (sumCounterOne + sumCounterTwo) + 1000 // return totalCounter // } // // рекурсия setTimeout // setTimeout(function restartCounter() { // // счётчик // let addCounterOne = 8 // let addCounterTwo = 8 // // вызов подсчет таймаутов // sumTimeout(addCounterOne, addCounterTwo) // // вызов светофора counter( первый счётчик , второй счётчик, класс с индексом [0], класс с индексом [1], класс с индексом [2]) // counter(addCounterOne, addCounterTwo, circle[0], circle[1], circle[2]) // setTimeout(restartCounter, totalCounter) // },100) // domEventPromise // const domEventPromise = function (element, eventName) { // return new Promise(function(resolve, reject) { // let func // element.addEventListener(eventName, func = (event) => { // resolve(event) // element.removeEventListener(eventName, func) // }) // }) // } // PedestrianTrafficLight // const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms)) // let red = document.querySelector('#red') // let green = document.querySelector('#green') // let btn = document.querySelector('#btn') // async function PedestrianTrafficLight() { // while (true) { // redPlay() // await Promise.race([delay(8000), domEventPromise(btn,'click')]) // greenPlay() // await delay(8000) // } // } // function redPlay() { // remove() // red.style.background = 'red' // } // function greenPlay() { // remove() // green.style.background = 'green' // } // function remove() { // red.style.background = '' // green.style.background = '' // } // PedestrianTrafficLight() // btn.addEventListener('click', btnClick) // async function btnClick() { // btn.disabled = true // await delay(12000) // btn.disabled = false // } // // // or // // находим все классы // let round = document.getElementsByClassName('round') // // функция - счётчик counter // function counter(setCountOne, setCountTwo, Index0, Index1) { // // выводим счётчик // let timeoutId = setInterval(function() { // Index0.classList.add('roundBGColor1') // Index0.innerHTML = setCountOne // Index0.classList.add('roundColor1') // if(setCountOne <= 3) { // // мигание // setTimeout(function() { // Index0.innerHTML = '' // Index0.classList.remove('roundBGColor1') // }, 500) // } // setCountOne-- // // при достижении нуля останавливаем таймер и удаляем класс (красный) // if (setCountOne == 0) { // clearInterval(timeoutId) // Index0.classList.remove('roundBGColor1') // let timeId = setInterval(function() { // Index1.innerHTML = setCountTwo // Index1.classList.add('roundColor2') // // добавляем класс(зелёный) // Index1.classList.add('roundBGColor3') // // добавляем второй счётчик // if(setCountTwo <= 3) { // // мигание // setTimeout(function() { // Index1.classList.remove('roundBGColor3') // }, 500) // } // // при достижении нуля останавливаем таймер и удаляем класc (зеленый) // if (setCountTwo == 0) { // Index1.innerHTML = '' // clearInterval(timeoutId) // Index1.classList.remove('roundBGColor3') // } // // подготовка счётчика к новому циклу // if(setCountTwo == 0) { // clearInterval(timeId) // } // setCountTwo-- // }, 1000) // } // },1000) // } // let totalCounter // function sumTimeout(countOne, countTwo) { // let sumCountOne = countOne * 1000 // let sumCountTwo = countTwo * 1000 // totalCounter = (sumCountOne + sumCountTwo) + 1000 // return totalCounter // } // setTimeout(function restartCounter() { // let addCountOne = 8 // let addCountTwo = 8 // sumTimeout(addCountOne, addCountTwo) // counter(addCountOne, addCountTwo, round[0], round[1]) // setTimeout(restartCounter, totalCounter) // },100) // function Dis(el,tm) { // el.disabled = true // Dis.obj = el // setTimeout('Dis.obj.disabled = false;', tm * 1000) // } // смену цвета по нажатию кнопки долго думала как реализовать, но пока еще в процессе - решила сдать уже так // speedtest // async function speedtest(getPromise, count, parallel = 1) { // let t1 = performance.now() // for (let i = 0; i < count; i++) { // let arrPromise = [] // for (let j = 0; j < parallel; j++) { // arrPromise.push(getPromise()) // } // await Promise.all(arrPromise) // } // let t2 = performance.now() // let duration = t2 - t1 // let querySpeed = count / duration // let queryDuration = duration / count // let parallelSpeed = (count * parallel) / duration // let parallelDuration = duration / (count * parallel) // return { // duration, // querySpeed, //средняя скорость одного запроса // queryDuration, // // parallelSpeed, // parallelDuration // } // } // speedtest(() => delay(1000), 10, 10 ).then(result => console.log(result)) // // {duration: 10000, // // querySpeed: 0.001, //1 тысячная запроса за миллисекунду // // queryDuration: 1000, //1000 миллисекунд на один реальный запрос в среднем // // parallelSpeed: 0.01 // 100 запросов за 10000 миллисекунд // // parallelDuration: 100 // 100 запросов за 10000 миллисекунд // speedtest(() => fetch('http://swapi.dev/api/people/1').then(res => res.json()), 10, 5) //проверяла результат работы раскомментируя по одному блоку кода с заданием js/html