|
@@ -0,0 +1,150 @@
|
|
|
+//svetofor
|
|
|
+const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
|
|
|
+
|
|
|
+async function trafficLight(element, timeGreen, timeYellow, timeRed){
|
|
|
+ while (true){
|
|
|
+ element.style.backgroundColor = 'green'
|
|
|
+ await delay(timeGreen)
|
|
|
+ element.style.backgroundColor = 'yellow'
|
|
|
+ await delay(timeYellow)
|
|
|
+ element.style.backgroundColor = 'red'
|
|
|
+ await delay(timeRed)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+//domEventPromise
|
|
|
+function domEventPromise(element, eventName) {
|
|
|
+ return new Promise((resolve) => {
|
|
|
+ element.addEventListener(eventName, function toDelete (e) {
|
|
|
+ element.removeEventListener(eventName, toDelete)
|
|
|
+ resolve(e)
|
|
|
+ })
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+//PedestrianTrafficLight
|
|
|
+function changeColor(element, color) {
|
|
|
+ element.style.backgroundColor = color
|
|
|
+}
|
|
|
+
|
|
|
+async function pedestrianTrafficLight(element, element2, timeGreen, timeYellow, timeRed) {
|
|
|
+ while(true) {
|
|
|
+ delay(timeGreen / 3).then(() => btn.disabled = false)
|
|
|
+ changeColor(element, 'green')
|
|
|
+ changeColor(element2, 'red')
|
|
|
+ await Promise.race([delay(timeGreen), domEventPromise(btn, 'click')])
|
|
|
+
|
|
|
+ btn.disabled = true
|
|
|
+ changeColor(element, 'yellow')
|
|
|
+ await delay(timeYellow)
|
|
|
+
|
|
|
+ changeColor(element, 'red')
|
|
|
+ changeColor(element2, 'green')
|
|
|
+ await delay(timeRed)
|
|
|
+
|
|
|
+ changeColor(element, 'yellow')
|
|
|
+ changeColor(element2, 'red')
|
|
|
+ await delay(timeYellow)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+pedestrianTrafficLight(trafficLightContainer, pedestrianTrafficLightContainer, 10000, 3000, 15000)
|
|
|
+
|
|
|
+//speedtest
|
|
|
+async function speedtest(getPromise, count, parallel=1){
|
|
|
+ let startTime = performance.now()
|
|
|
+
|
|
|
+ for (let i = 0; i < count; i++) {
|
|
|
+ let promises = []
|
|
|
+ for (let j = 0; j < parallel; j++) {
|
|
|
+ promises.push(getPromise())
|
|
|
+ }
|
|
|
+ await Promise.all(promises)
|
|
|
+ }
|
|
|
+
|
|
|
+ let duration = performance.now() - startTime
|
|
|
+ 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))
|
|
|
+speedtest(() => fetch('http://swapi.dev/api/people/1').then(res => res.json()), 3, 1).then(result => console.log(result))
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+// async function newTrafficLight(element, timeGreen, timeYellow, timeRed) {
|
|
|
+// async function trafficLightImproved(){
|
|
|
+// while (a){
|
|
|
+// element.style.backgroundColor = 'green'
|
|
|
+// if (!a) break
|
|
|
+// await delay(timeGreen)
|
|
|
+// element.style.backgroundColor = 'yellow'
|
|
|
+// if (!a) break
|
|
|
+// await delay(timeYellow)
|
|
|
+// element.style.backgroundColor = 'red'
|
|
|
+// if (!a) break
|
|
|
+// await delay(timeRed)
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+// let a = true;
|
|
|
+
|
|
|
+// // btn.onclick = async () => {
|
|
|
+// // a = false;
|
|
|
+// // await delay(3000)
|
|
|
+// // a = true;
|
|
|
+// // trafficLightImproved()
|
|
|
+// // }
|
|
|
+
|
|
|
+// trafficLightImproved()
|
|
|
+// while (true) {
|
|
|
+// await domEventPromise(btn, 'click').then(e => console.log('event click happens', e))
|
|
|
+// .then(async () => {
|
|
|
+// a = false
|
|
|
+// await delay(1000)
|
|
|
+// a = true
|
|
|
+// trafficLightImproved()
|
|
|
+// })
|
|
|
+// await delay(5000)
|
|
|
+// }
|
|
|
+// }
|
|
|
+
|
|
|
+// newTrafficLight(document.body, 5000, 2000, 5000)
|
|
|
+
|
|
|
+
|