/* function green(){ console.log('green light'); let div = document.getElementById('green'); div.style.backgroundColor = 'green' } function yellow(){ console.log('yellow light'); let div = document.getElementById('yellow'); div.style.backgroundColor = 'yellow' } function red(){ console.log('red light'); let div = document.getElementById('red'); div.style.backgroundColor = 'red'; } */ const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms)) /* async function trafficLight(parent,greenTime,yellowTime,redTime){ for(let i=0; i<3;i++){ let div = document.createElement('div') div.classList = 'round'; parent.append(div); } while (true){ // включаем зеленый parent.children[0].style.backgroundColor = 'green'; parent.children[2].style.backgroundColor = ''; await delay(greenTime) // включаем желтый parent.children[0].style.backgroundColor = ''; parent.children[1].style.backgroundColor = 'yellow'; await delay(yellowTime) // включаем красный parent.children[1].style.backgroundColor = ''; parent.children[2].style.backgroundColor = 'red'; await delay(redTime) } } trafficLight(trafficlight,4000,3000,4000); */ function domEventPromise(parent,action){ return new Promise((resolved,reject) =>{ function clicked(event){ resolved(event, console.log(event)) parent.removeEventListener(action,clicked); } parent.addEventListener(action, clicked)} ) /* const result = (event) => { console.log(event.detail) resolved(event.target) parent.removeEventListener(action,result); } parent.addEventListener(action,result); }) */ } domEventPromise(knopka,'click').then((e) => console.log('event click happens', e)); //pedestrian light async function pedestrianLight(parent,btn,greenTime,redTime){ for(let i=0; i<2;i++){ let div = document.createElement('div') div.classList = 'round'; parent.append(div); } /* let btnRes = (btn) => new Promise((resolved,reject)=>{ console.log(`i'm disabled`); resolved(setTimeout(btn.disabled = true, 10000)) }) */ let buttonResolver = (knopka) => new Promise(() => { setTimeout(() => { // console.log('start'); knopka.disabled = ""}, 10000); }, () => reject) while (true){ // включаем зеленый parent.children[0].style.backgroundColor = 'green'; parent.children[1].style.backgroundColor = ''; await /* delay(greenTime) */ Promise.race([delay(greenTime),buttonResolver(btn)]) // включаем красный parent.children[0].style.backgroundColor = ''; parent.children[1].style.backgroundColor = 'red'; await /* delay(redTime) */ Promise.race([delay(redTime),domEventPromise(knopka,'click')]) } } pedestrianLight(trafficlight,knopka,15000,10000) async function speedtest(getPromise, count,parallel=1){ let duration = performance.now(); let initedParalel = parallel; let promiseArr = []; for(let i = 0; i < count; i++){ promiseArr[i] = getPromise(); parallel-=1; await Promise.all(promiseArr); } console.log(promiseArr); duration = performance.now() - duration console.log(initedParalel*count); return { duration:duration, querySpeed: count/duration, //средняя скорость одного запроса queryDuration:duration/count, // parallelSpeed: count/duration*initedParalel, parallelDuration: duration/(initedParalel*count) } } 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()), 1, 2) */