123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211 |
- //Светофор
- 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)
|