main.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. // const gql = (url, query, variables={}) =>
  2. // fetch(url, {
  3. // method: 'POST',
  4. // body: JSON.stringify({query,variables}),
  5. // headers: {
  6. // 'Content-Type': 'application/json',
  7. // }
  8. // }).then((res) => res.json());
  9. // (async () => {
  10. // console.log(await gql(`http://shop-roles.asmer.fs.a-level.com.ua/graphql`, `query cats{
  11. // CategoryFind(query:"[{}]"){
  12. // name goods{
  13. // name
  14. // }
  15. // }
  16. // }`))
  17. // })()
  18. // const getGQL = url =>
  19. // (query, variables) => fetch(url, {
  20. // //метод
  21. // method: 'POST',
  22. // headers: {
  23. // //заголовок content-type
  24. // "Content-Type": "application/json"
  25. // },
  26. // body: JSON.stringify({query, variables})
  27. // //body с ключами query и variables
  28. // }).then(res => res.json()).then(
  29. // obj => {
  30. // let login = obj.data.login;
  31. // console.log(login);
  32. // if (!login) {
  33. // throw new Error('login undefind');
  34. // }
  35. // return login;;
  36. // })
  37. // //расковырять data, если все ок - отдать data.login или data.CategoryFindOne, или шо там еще
  38. // //если есть errors и нет data, то выбросить исключение и тем самым зареджектить промис
  39. // .catch(console.log)
  40. // const gql = getGQL('http://shop-roles.asmer.fs.a-level.com.ua/graphql');
  41. // gql(`
  42. // query NameForMe1($login:String, $password:String){
  43. // login(login:$login, password:$password)
  44. // }
  45. // `, {login: 'tst', password: '123'})
  46. //Task Светофор
  47. // const div = document.createElement('div');
  48. // div.id = 'trafficLights';
  49. // div.style.backgroundColor = 'rgb(59, 52, 52)';
  50. // div.style.width = '200px';
  51. // div.style.height = '350px';
  52. // const divRed = document.createElement('div');
  53. // divRed.id = 'red';
  54. // divRed.style.backgroundColor = 'rgb(232, 235, 209)';
  55. // divRed.style.width = '90px';
  56. // divRed.style.height = '90px';
  57. // divRed.style.marginLeft = "27%";
  58. // divRed.style.marginTop = "7%";
  59. // divRed.style.display = 'inline-block';
  60. // divRed.style.borderRadius = '50px';
  61. // const divOrange = document.createElement('div');
  62. // divOrange.id = 'orange';
  63. // divOrange.style.backgroundColor = 'rgb(232, 235, 209)';
  64. // divOrange.style.width = '90px';
  65. // divOrange.style.height = '90px';
  66. // divOrange.style.marginLeft = "27%";
  67. // divOrange.style.marginTop = "10%";
  68. // divOrange.style.borderRadius = '50px';
  69. // const divGreen = document.createElement('div');
  70. // divGreen.id = 'green';
  71. // divGreen.style.backgroundColor = 'rgb(232, 235, 209)';
  72. // divGreen.style.width = '90px';
  73. // divGreen.style.height = '90px';
  74. // divGreen.style.marginLeft = "27%";
  75. // divGreen.style.marginTop = "10%";
  76. // divGreen.style.borderRadius = '50px';
  77. // document.body.append(div);
  78. // div.append(divRed);
  79. // div.append(divOrange);
  80. // div.append(divGreen);
  81. // const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
  82. // async function trafficLight(){
  83. // while (true){
  84. // divGreen.style.backgroundColor = 'green';//включаем зеленый
  85. // await delay(6000);
  86. // divGreen.style.backgroundColor = 'rgb(232, 235, 209)';
  87. // divOrange.style.backgroundColor = 'rgb(237, 138, 57)';// включаем желтый
  88. // await delay(2000);
  89. // divOrange.style.backgroundColor = 'rgb(232, 235, 209)';
  90. // divRed.style.backgroundColor = 'rgb(235, 12, 23)'; //включаем красный
  91. // await delay(3500);
  92. // divRed.style.backgroundColor = 'rgb(232, 235, 209)';
  93. // }
  94. // }
  95. // trafficLight();
  96. //Task domEventPromise
  97. // const button = document.createElement('button');
  98. // document.body.appendChild(button).innerText = "Click";
  99. // function domEventPromise (knopka, eventName) {
  100. // return new Promise((resolve) => {
  101. // knopka.addEventListener(eventName, function getEvent(e) {
  102. // this.removeEventListener(eventName, getEvent);
  103. // resolve(e);
  104. // });
  105. // })
  106. // }
  107. // domEventPromise(button, 'click').then((e) => {
  108. // console.log('event click happens', e);
  109. // })
  110. // PedestrianTrafficLight
  111. // const div = document.createElement('div');
  112. // div.id = 'trafficLights';
  113. // div.style.backgroundColor = 'rgb(59, 52, 52)';
  114. // div.style.width = '200px';
  115. // div.style.height = '350px';
  116. // const divRed = document.createElement('div');
  117. // divRed.id = 'red';
  118. // divRed.style.backgroundColor = 'rgb(232, 235, 209)';
  119. // divRed.style.width = '90px';
  120. // divRed.style.height = '90px';
  121. // divRed.style.marginLeft = "27%";
  122. // divRed.style.marginTop = "7%";
  123. // divRed.style.display = 'inline-block';
  124. // divRed.style.borderRadius = '50px';
  125. // const divGreen = document.createElement('div');
  126. // divGreen.id = 'green';
  127. // divGreen.style.backgroundColor = 'rgb(232, 235, 209)';
  128. // divGreen.style.width = '90px';
  129. // divGreen.style.height = '90px';
  130. // divGreen.style.marginLeft = "27%";
  131. // divGreen.style.marginTop = "10%";
  132. // divGreen.style.borderRadius = '50px';
  133. // document.body.append(div);
  134. // div.append(divRed);
  135. // div.append(divGreen);
  136. // const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms))
  137. // const button = document.createElement('button');
  138. // document.body.appendChild(button).innerText = "Click";
  139. // button.style.marginTop = "30px";
  140. // function domEventPromise (knopka, eventName) {
  141. // return new Promise((resolve) => {
  142. // knopka.addEventListener(eventName, function getEvent(e) {
  143. // this.removeEventListener(eventName, getEvent);
  144. // button.setAttribute('disabled', true);
  145. // divRed.style.backgroundColor = 'rgb(232, 235, 209)';
  146. // divGreen.style.backgroundColor = 'green';
  147. // delay(2000).then(() => button.removeAttribute('disabled'));
  148. // resolve(e);
  149. // })
  150. // })
  151. // }
  152. // async function trafficLight(){
  153. // while (true){
  154. // divRed.style.backgroundColor = 'rgb(232, 235, 209)';
  155. // divGreen.style.backgroundColor = 'green';
  156. // await Promise.race([delay(2000), domEventPromise(button, 'click')]);
  157. // divRed.style.backgroundColor = 'rgb(235, 12, 23)';
  158. // divGreen.style.backgroundColor = 'rgb(232, 235, 209)';
  159. // await Promise.race([delay(2000), domEventPromise(button, 'click')]);
  160. // }
  161. // }
  162. // trafficLight();
  163. // Task speedtest
  164. const delay = ms => new Promise(ok => setTimeout(() => ok(ms), ms));
  165. async function speedtest(getPromise, count,parallel=1){
  166. let timedurationStart = performance.now();
  167. let arrFetch = [];
  168. for (let q = 0; q < parallel; q++) {
  169. arrFetch[q] = await getPromise();
  170. }
  171. const timeBetween = performance.now();
  172. for (let i = 0; i < count; i++) {
  173. await Promise.all(arrFetch);
  174. }
  175. let timedurationEnd = performance.now();
  176. return {
  177. duration: timedurationEnd - timedurationStart,
  178. querySpeed: count / (timeBetween - timedurationStart),
  179. queryDuration: (timeBetween - timedurationStart) / count,
  180. parallelSpeed: (count * parallel)/ (timedurationEnd - timedurationStart),
  181. parallelDuration: (timedurationEnd - timedurationStart) / (count * parallel),
  182. }
  183. }
  184. speedtest(() => delay(1000), 10, 10 ).then(result => console.log(result))
  185. speedtest(() => fetch('http://swapi.dev/api/people/1').then(res => res.json()), 10, 5).then(result => console.log(result))