index.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343
  1. // graphql tasks
  2. // first
  3. // async function gql(url, query, variables) {
  4. // let response = await fetch(url, {
  5. // method: "POST",
  6. // headers: { "content-type": "application/json" },
  7. // body: JSON.stringify({ query, variables }),
  8. // });
  9. // return await response.json();
  10. // }
  11. // (async () => {
  12. // let data = await gql(
  13. // "http://shop-roles.asmer.fs.a-level.com.ua/graphql",
  14. // `query cats($q:String) {
  15. // CategoryFind(query:$q) {
  16. // name
  17. // goods {
  18. // name
  19. // images {
  20. // url
  21. // }
  22. // }
  23. // }
  24. // }`,
  25. // { q: "[{}]" }
  26. // );
  27. // return showData(data.data.CategoryFind);
  28. // })();
  29. // function showData(object) {
  30. // console.log(object);
  31. // let table = document.createElement("table");
  32. // table.setAttribute("border", "1");
  33. // for (let key of Object.keys(object)) {
  34. // let tr = document.createElement("tr");
  35. // let th = document.createElement("th");
  36. // let td = document.createElement("td");
  37. // th.innerText = object[key].name;
  38. // if (Array.isArray(object[key].goods)) {
  39. // let subObj = object[key].goods;
  40. // let subTable = document.createElement("table");
  41. // subTable.setAttribute("border", "1");
  42. // for (let key of Object.keys(subObj)) {
  43. // let subTr = document.createElement("tr");
  44. // let subTh = document.createElement("th");
  45. // let subTd = document.createElement("td");
  46. // subTh.innerText = subObj[key].name;
  47. // if (subObj[key].images && Array.isArray(subObj[key].images)) {
  48. // let imgTr = document.createElement("tr");
  49. // let imgTh = document.createElement("th");
  50. // let imgTd = document.createElement("td");
  51. // subTd.innerHTML = `<img src="http://shop-roles.asmer.fs.a-level.com.ua/${subObj[key].images[0].url}" alt="imgGood" style="height: 200px; width: 400px;">`;
  52. // } else {
  53. // subTd.innerText = subObj[key].goods;
  54. // }
  55. // subTr.appendChild(subTh);
  56. // subTr.appendChild(subTd);
  57. // subTable.appendChild(subTr);
  58. // }
  59. // td.appendChild(subTable);
  60. // } else {
  61. // td.innerText = object[key].goods;
  62. // }
  63. // tr.appendChild(th);
  64. // tr.appendChild(td);
  65. // table.appendChild(tr);
  66. // container.appendChild(table);
  67. // }
  68. // }
  69. // second
  70. // const getGQL = (url) => (query, variables) =>
  71. // fetch(url, {
  72. // method: "POST",
  73. // headers: {
  74. // "Content-Type": "application/json",
  75. // },
  76. // body: JSON.stringify({ query, variables }),
  77. // })
  78. // .then((res) => res.json())
  79. // .then((data) => {
  80. // try {
  81. // return data.data.login;
  82. // } catch (e) {
  83. // throw new Error("Something wrong");
  84. // }
  85. // });
  86. // const gql = getGQL("http://shop-roles.asmer.fs.a-level.com.ua/graphql");
  87. // (async function () {
  88. // console.log(
  89. // await gql(
  90. // `
  91. // query log($login:String, $password:String){
  92. // login(login:$login, password:$password)
  93. // }
  94. // `,
  95. // { login: "tst", password: "123" }
  96. // )
  97. // );
  98. // })();
  99. // Async/Await Homework 2
  100. // Светофор
  101. // const delay = (ms) => new Promise((ok) => setTimeout(() => ok(ms), ms));
  102. // async function trafficLight() {
  103. // let container = document.createElement("div");
  104. // while (true) {
  105. // container.style.background = "green";
  106. // let green = document.createElement("p");
  107. // green.innerText = "Зелёный свет включен";
  108. // container.appendChild(green);
  109. // lights.appendChild(container);
  110. // await delay(10000);
  111. // container.removeChild(container.firstChild);
  112. // container.style.background = "yellow";
  113. // let yellow = document.createElement("p");
  114. // yellow.innerText = "Желтый свет включен";
  115. // container.appendChild(yellow);
  116. // lights.appendChild(container);
  117. // await delay(2000);
  118. // container.removeChild(container.firstChild);
  119. // container.style.background = "red";
  120. // let red = document.createElement("p");
  121. // red.innerText = "Красный свет включен";
  122. // container.appendChild(red);
  123. // lights.appendChild(container);
  124. // await delay(7000);
  125. // container.removeChild(container.firstChild);
  126. // }
  127. // }
  128. // trafficLight();
  129. // Stage 2
  130. // function delay(ms, el) {
  131. // return new Promise((ok) => {
  132. // let sec = ms / 1000;
  133. // (function counter(s) {
  134. // if (document.getElementById("timer") === null) {
  135. // let p = document.createElement("p");
  136. // p.id = "timer";
  137. // p.innerText = sec;
  138. // el.appendChild(p);
  139. // }
  140. // if (document.getElementById("timer") !== null) {
  141. // if (sec > 0) {
  142. // timer.innerText = sec;
  143. // setTimeout(() => counter(sec--), 1000);
  144. // } else {
  145. // el.removeChild(timer);
  146. // return ok();
  147. // }
  148. // }
  149. // })();
  150. // });
  151. // }
  152. // async function trafficLightImproved(gms, yms, rms, el) {
  153. // let container = document.createElement("div");
  154. // while (true) {
  155. // container.style.background = "green";
  156. // let green = document.createElement("p");
  157. // green.innerText = "Зелёный свет включен";
  158. // container.appendChild(green);
  159. // el.appendChild(container);
  160. // await delay(gms, el);
  161. // container.removeChild(container.firstChild);
  162. // container.style.background = "yellow";
  163. // let yellow = document.createElement("p");
  164. // yellow.innerText = "Желтый свет включен";
  165. // container.appendChild(yellow);
  166. // el.appendChild(container);
  167. // await delay(yms, el);
  168. // container.removeChild(container.firstChild);
  169. // container.style.background = "red";
  170. // let red = document.createElement("p");
  171. // red.innerText = "Красный свет включен";
  172. // container.appendChild(red);
  173. // el.appendChild(container);
  174. // await delay(rms, el);
  175. // container.removeChild(container.firstChild);
  176. // }
  177. // }
  178. // trafficLightImproved(10000, 2000, 7000, lights);
  179. // domEventPromise
  180. // function domEventPromise(element, eventName) {
  181. // return new Promise((resolve) => {
  182. // element.addEventListener(eventName, (event) => {
  183. // element.disabled = true;
  184. // element.removeEventListener(eventName, () => {});
  185. // return resolve(event);
  186. // });
  187. // });
  188. // }
  189. // domEventPromise(knopka, "click").then((e) =>
  190. // console.log(`event ${e.type} happens`, e)
  191. // );
  192. // domEventPromise(knopka, "contextmenu").then((e) =>
  193. // console.log(`event ${e.type} happens`, e)
  194. // );
  195. // PedestrianTrafficLight
  196. // function domEventPromisePedestrian(element, eventName) {
  197. // return new Promise((resolve) => {
  198. // element.addEventListener(eventName, (event) => {
  199. // console.log("Resolve");
  200. // return resolve(event);
  201. // });
  202. // });
  203. // }
  204. // function delay(ms, el) {
  205. // return new Promise((ok) => {
  206. // let sec = ms / 1000;
  207. // (function counter(s) {
  208. // if (document.getElementById("timer") === null) {
  209. // let p = document.createElement("p");
  210. // p.id = "timer";
  211. // p.innerText = sec;
  212. // el.appendChild(p);
  213. // }
  214. // if (document.getElementById("timer") !== null) {
  215. // if (sec > 0) {
  216. // timer.innerText = sec;
  217. // if (
  218. // infoBlock.classList.contains("red") &&
  219. // document.getElementById("pedestrianBtn") === null
  220. // ) {
  221. // let pedestrianBtn = document.createElement("button");
  222. // pedestrianBtn.id = "pedestrianBtn";
  223. // pedestrianBtn.innerText = "Turn on green light";
  224. // el.appendChild(pedestrianBtn);
  225. // if (+timer.innerText > 4) {
  226. // (async function () {
  227. // async function simpleDelay(ms) {
  228. // console.log(`Delay: ${ms / 1000} seconds`);
  229. // return new Promise((ok) => setTimeout(() => ok(ms), ms));
  230. // }
  231. // await simpleDelay(2000);
  232. // await Promise.race([
  233. // domEventPromisePedestrian(pedestrianBtn, "click").then(() =>
  234. // delay(0)
  235. // ),
  236. // simpleDelay(ms),
  237. // ]);
  238. // })();
  239. // }
  240. // }
  241. // if (
  242. // infoBlock.classList.contains("green") &&
  243. // document.getElementById("pedestrianBtn") !== null
  244. // ) {
  245. // el.removeChild(pedestrianBtn);
  246. // }
  247. // setTimeout(() => counter(sec--), 1000);
  248. // } else {
  249. // el.removeChild(timer);
  250. // return ok();
  251. // }
  252. // }
  253. // })();
  254. // });
  255. // }
  256. // async function trafficLightPedestrian(gms, rms, el) {
  257. // let container = document.createElement("div");
  258. // container.id = "infoBlock";
  259. // while (true) {
  260. // container.classList.add("green");
  261. // let green = document.createElement("p");
  262. // green.innerText = "Зелёный свет для пешеходов включен";
  263. // container.appendChild(green);
  264. // el.appendChild(container);
  265. // await delay(gms, el);
  266. // container.classList.remove("green");
  267. // container.removeChild(container.firstChild);
  268. // container.classList.add("red");
  269. // let red = document.createElement("p");
  270. // red.innerText = "Красный свет для пешеходов включен";
  271. // container.appendChild(red);
  272. // el.appendChild(container);
  273. // await delay(rms, el);
  274. // container.classList.remove("red");
  275. // container.removeChild(container.firstChild);
  276. // }
  277. // }
  278. // trafficLightPedestrian(3000, 10000, pedestrianLights);
  279. // speedtest
  280. // const delay = (ms) => new Promise((ok) => setTimeout(() => ok(ms), ms));
  281. // async function speedtest(getPromise, count = 1, parallel = 1) {
  282. // let duration;
  283. // let querySpeed;
  284. // let queryDuration;
  285. // let parallelSpeed;
  286. // let parallelDuration;
  287. // let start = performance.now();
  288. // let queries = [];
  289. // await (async () => {
  290. // let getPromises = [];
  291. // for (let i = 0; i < count; i++) {
  292. // for (let j = 0; j < parallel; j++) {
  293. // getPromises.push(getPromise);
  294. // }
  295. // let query = performance.now();
  296. // await Promise.all([...getPromises.map((el) => el())]);
  297. // queries.push(performance.now() - query);
  298. // }
  299. // })();
  300. // duration = performance.now() - start;
  301. // querySpeed = (count * parallel) / 100000;
  302. // queryDuration = queries.reduce((a, b) => a + b) / queries.length;
  303. // parallelSpeed = duration / (count * parallel) / 10000;
  304. // parallelDuration = duration / (count * parallel);
  305. // return {
  306. // duration, //общая длительность работы цикла
  307. // querySpeed, //реальная средняя скорость запроса
  308. // queryDuration, //реальное среднее время запроса
  309. // parallelSpeed, //скорость в запросах в миллисекунду
  310. // parallelDuration, //среднее время обработки запроса параллельно
  311. // };
  312. // }
  313. // speedtest(() => delay(1000), 5, 5).then((result) => console.log(result));