|
@@ -0,0 +1,211 @@
|
|
|
+//Светофор
|
|
|
+const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
|
|
|
+
|
|
|
+const divLights = document.getElementById('divTraffic')
|
|
|
+const btn = document.getElementById('btn')
|
|
|
+
|
|
|
+async function trafficLight() {
|
|
|
+ while (true) {
|
|
|
+ // //включаем зеленый
|
|
|
+ divLights.classList.remove('red')
|
|
|
+ divLights.classList.add('green')
|
|
|
+ await delay(3000)
|
|
|
+
|
|
|
+ divLights.classList.remove('green')
|
|
|
+ divLights.classList.add('yellow')
|
|
|
+ await delay(1000)
|
|
|
+
|
|
|
+ divLights.classList.remove('yellow')
|
|
|
+ divLights.classList.add('red')
|
|
|
+ await delay(3000)
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+//trafficLight()
|
|
|
+
|
|
|
+//Stage 2
|
|
|
+async function trafficLightUniversal(divLights, greenRedTime = 3000, yellowTime = 1000) {
|
|
|
+ while (true) {
|
|
|
+ // //включаем зеленый
|
|
|
+ divLights.classList.remove('red')
|
|
|
+ divLights.classList.add('green')
|
|
|
+ await delay(greenRedTime)
|
|
|
+
|
|
|
+ divLights.classList.remove('green')
|
|
|
+ divLights.classList.add('yellow')
|
|
|
+ await delay(yellowTime)
|
|
|
+
|
|
|
+ divLights.classList.remove('yellow')
|
|
|
+ divLights.classList.add('red')
|
|
|
+ await delay(greenRedTime)
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+}
|
|
|
+//trafficLight(divLights)
|
|
|
+async function domEventPromise(btn, eventName) {
|
|
|
+ return new Promise((resolve) => {
|
|
|
+ btn.addEventListener(eventName, (e) =>
|
|
|
+ resolve(e)
|
|
|
+ )
|
|
|
+ btn.removeEventListener(eventName, (e) =>
|
|
|
+ resolve(e))
|
|
|
+
|
|
|
+ })
|
|
|
+
|
|
|
+}
|
|
|
+//domEventPromise(btn, 'click').then(e => console.log('event click happens', e))
|
|
|
+//domEventPromise(btn, 'mouseover').then(e => console.log('event mouseover happens', e))
|
|
|
+async function disabledBtn(btn, btnTime) {
|
|
|
+
|
|
|
+ btn.disabled = true
|
|
|
+ btn.classList.add('disabled')
|
|
|
+
|
|
|
+ await delay(btnTime)
|
|
|
+ btn.disabled = false
|
|
|
+ btn.classList.remove('disabled')
|
|
|
+}
|
|
|
+
|
|
|
+async function PedestrianTrafficLight(divLights, greeTime = 5000, redTime = 45000, btnTime = 2000) {
|
|
|
+
|
|
|
+ while (true) {
|
|
|
+ divLights.classList.remove('red')
|
|
|
+ divLights.classList.add('green')
|
|
|
+ await Promise.race([delay(greeTime), domEventPromise((btn), 'click').then(e => {
|
|
|
+ disabledBtn(e.target, btnTime)
|
|
|
+ })])
|
|
|
+
|
|
|
+ divLights.classList.remove('green')
|
|
|
+ divLights.classList.add('red')
|
|
|
+ await Promise.race([delay(redTime), domEventPromise((btn), 'click').then(e =>
|
|
|
+ disabledBtn(e.target, btnTime)
|
|
|
+ )])
|
|
|
+ }
|
|
|
+}
|
|
|
+//PedestrianTrafficLight(divLights)
|
|
|
+//count - количество повторов
|
|
|
+//parallel - количество одновременных запросов/промисов в одном повторе
|
|
|
+//getPromise - функция, которая умеет вернуть нужный Вам промис для тестирования скорости его работы
|
|
|
+async function speedtest(getPromise, count, parallel = 1) {
|
|
|
+ const start = new Date().getTime();
|
|
|
+ try {
|
|
|
+ let promiseArray = []
|
|
|
+ for (let countPromise = 0; countPromise < count; countPromise++) {
|
|
|
+ for (let paralelPromise = 0; paralelPromise < parallel; paralelPromise++) {
|
|
|
+ promiseArray.push(getPromise())
|
|
|
+ }
|
|
|
+
|
|
|
+ console.log(promiseArray)
|
|
|
+ await Promise.all(promiseArray)
|
|
|
+ promiseArray.length = 0
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (error) {
|
|
|
+ console.log(new Error(error))
|
|
|
+ }
|
|
|
+ const end = new Date().getTime();
|
|
|
+ let durationTime = (end - start)
|
|
|
+ let querySpeedTime = (count / durationTime)
|
|
|
+ let queryDurationTime = (durationTime / count)
|
|
|
+ let parallelSpeedTime = ((parallel * count) / durationTime)
|
|
|
+ let parallelDurationTime = (durationTime / (parallel * count))
|
|
|
+ return {
|
|
|
+ duration: durationTime,
|
|
|
+ querySpeed: querySpeedTime,
|
|
|
+ queryDuration: queryDurationTime,
|
|
|
+ parallelSpeed: parallelSpeedTime,
|
|
|
+ parallelDuration: parallelDurationTime
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+//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)
|
|
|
+
|
|
|
+
|
|
|
+const getGQL = url =>
|
|
|
+ (query, variables) => fetch(url, {
|
|
|
+ //метод
|
|
|
+ method: 'POST',
|
|
|
+ headers: {
|
|
|
+ //заголовок content-type
|
|
|
+ "Content-Type": "application/json",
|
|
|
+ ...(localStorage.authToken ? { "Authorization": "Bearer " + localStorage.authToken } : {})
|
|
|
+ },
|
|
|
+ body: JSON.stringify({ query, variables })
|
|
|
+ //body с ключами query и variables
|
|
|
+ }).then(res => res.json())
|
|
|
+ .then(data => {
|
|
|
+ if (data.data) {
|
|
|
+ return Object.values(data.data)[0]
|
|
|
+ } else throw new Error(JSON.stringify(data.errors))
|
|
|
+ })
|
|
|
+
|
|
|
+//const gql = getGQL('http://shop-roles.asmer.fs.a-level.com.ua/graphql');
|
|
|
+const backendURL = 'http://shop-roles.asmer.fs.a-level.com.ua'
|
|
|
+
|
|
|
+const gql = getGQL(backendURL + '/graphql')
|
|
|
+ //написать тестовых запросов:
|
|
|
+ //логин
|
|
|
+async function queryLogin() {
|
|
|
+ return await gql(` query login($login:String, $password:String){
|
|
|
+ login(login:$login, password:$password)
|
|
|
+ } `, { login: "LenaKyrylenko", password: "Litana13lank" }).then(res => console.log("login:", res))
|
|
|
+}
|
|
|
+queryLogin()
|
|
|
+ //2 вариант
|
|
|
+async function gqlLogin(login, password) {
|
|
|
+ return await gql(` query login($login:String, $password:String){
|
|
|
+ login(login:$login, password:$password)
|
|
|
+ } `, { login: login, password: password }).then(res => console.log("login:", res))
|
|
|
+}
|
|
|
+gqlLogin("LenaKyrylenko", "Litana13lank")
|
|
|
+ //регистрация
|
|
|
+async function mutationrRegister() {
|
|
|
+ return await gql(`mutation register($login: String, $password: String) {
|
|
|
+ UserUpsert(user: {login: $login, password: $password, nick: $login}) {
|
|
|
+ _id login
|
|
|
+ }
|
|
|
+ }`, { login: "Lena", password: "12345" }).then(res => console.log(res))
|
|
|
+}
|
|
|
+//mutationrRegister()
|
|
|
+
|
|
|
+//все категории
|
|
|
+async function queryAllCats() {
|
|
|
+ return await gql(`query allCats {
|
|
|
+ CategoryFind(query: "[{}]"){
|
|
|
+ _id name goods { _id name description price images{url}}}
|
|
|
+ }`).then(res => console.log("All categories:", res))
|
|
|
+}
|
|
|
+queryAllCats()
|
|
|
+ //категория по id
|
|
|
+async function queryCatById(idCategory) {
|
|
|
+ return await gql(`query catById($q: String){
|
|
|
+ CategoryFindOne(query: $q){
|
|
|
+ _id name goods {
|
|
|
+ _id name price images {
|
|
|
+ url
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+}`, { q: idCategory }).then(res => console.log("Category by id:", res))
|
|
|
+}
|
|
|
+let categoryId = "[{\"_id\": \"5dc458985df9d670df48cc47\"}]"
|
|
|
+queryCatById(categoryId)
|
|
|
+ //товар по id
|
|
|
+async function queryGoodById(idGood) {
|
|
|
+ return await gql(`query goodById($good: String){
|
|
|
+ GoodFindOne(query: $good){
|
|
|
+ _id name description price
|
|
|
+ categories{_id name owner{_id login nick}}images{url}}
|
|
|
+ }`, { good: idGood }).then(res => console.log("Good by id:", res))
|
|
|
+ //.then(myToken => localStorage.authToken = myToken)
|
|
|
+}
|
|
|
+let goodId = "[{\"_id\": \"5e1f396856d8f720513e6cae\"}]"
|
|
|
+queryGoodById(goodId)
|
|
|
+
|
|
|
+//console.log("localStorage = ", localStorage)
|