Browse Source

Complete async/await 2 homework and write some GQL queries

Bonyant 2 years ago
parent
commit
e3433fb3dc
3 changed files with 216 additions and 11 deletions
  1. 100 11
      12/index.js
  2. 12 0
      13/index.html
  3. 104 0
      13/index.js

+ 100 - 11
12/index.js

@@ -1,4 +1,7 @@
-// graphql task
+// graphql tasks
+
+// first
+
 // async function gql(url, query, variables) {
 //   let response = await fetch(url, {
 //     method: "POST",
@@ -68,6 +71,39 @@
 //   }
 // }
 
+// second
+
+// const getGQL = (url) => (query, variables) =>
+//   fetch(url, {
+//     method: "POST",
+//     headers: {
+//       "Content-Type": "application/json",
+//     },
+//     body: JSON.stringify({ query, variables }),
+//   })
+//     .then((res) => res.json())
+//     .then((data) => {
+//       try {
+//         return data.data.login;
+//       } catch (e) {
+//         throw new Error("Something wrong");
+//       }
+//     });
+
+// const gql = getGQL("http://shop-roles.asmer.fs.a-level.com.ua/graphql");
+// (async function () {
+//   console.log(
+//     await gql(
+//       `
+//       query log($login:String, $password:String){
+//           login(login:$login, password:$password)
+//       }
+//   `,
+//       { login: "tst", password: "123" }
+//     )
+//   );
+// })();
+
 // Async/Await Homework 2
 
 // Светофор
@@ -175,10 +211,15 @@
 //   console.log(`event ${e.type} happens`, e)
 // );
 
-// PedestrianTrafficLight (unfinished)
+// PedestrianTrafficLight
 
-// function simpleDelay(ms) {
-//   new Promise((ok) => setTimeout(() => ok(ms), ms));
+// function domEventPromisePedestrian(element, eventName) {
+//   return new Promise((resolve) => {
+//     element.addEventListener(eventName, (event) => {
+//       console.log("Resolve");
+//       return resolve(event);
+//     });
+//   });
 // }
 
 // function delay(ms, el) {
@@ -202,14 +243,21 @@
 //             pedestrianBtn.id = "pedestrianBtn";
 //             pedestrianBtn.innerText = "Turn on green light";
 //             el.appendChild(pedestrianBtn);
-//             pedestrianBtn.addEventListener("click", (event) => {
-//               (async function greenLight() {
-//                 if (+timer.innerText > 3) {
-//                   await simpleDelay(2000);
-//                   console.log("After delay");
+//             if (+timer.innerText > 4) {
+//               (async function () {
+//                 async function simpleDelay(ms) {
+//                   console.log(`Delay: ${ms / 1000} seconds`);
+//                   return new Promise((ok) => setTimeout(() => ok(ms), ms));
 //                 }
+//                 await simpleDelay(2000);
+//                 await Promise.race([
+//                   domEventPromisePedestrian(pedestrianBtn, "click").then(() =>
+//                     delay(0)
+//                   ),
+//                   simpleDelay(ms),
+//                 ]);
 //               })();
-//             });
+//             }
 //           }
 //           if (
 //             infoBlock.classList.contains("green") &&
@@ -245,10 +293,51 @@
 //     container.appendChild(red);
 //     el.appendChild(container);
 //     await delay(rms, el);
+
 //     container.classList.remove("red");
 //     container.removeChild(container.firstChild);
 //   }
 // }
 // trafficLightPedestrian(3000, 10000, pedestrianLights);
 
-// speedtest (temporarily not done)
+// speedtest
+
+// const delay = (ms) => new Promise((ok) => setTimeout(() => ok(ms), ms));
+
+// async function speedtest(getPromise, count = 1, parallel = 1) {
+//   let duration;
+//   let querySpeed;
+//   let queryDuration;
+//   let parallelSpeed;
+//   let parallelDuration;
+//   let start = performance.now();
+//   let queries = [];
+
+//   await (async () => {
+//     let getPromises = [];
+//     for (let i = 0; i < count; i++) {
+//       for (let j = 0; j < parallel; j++) {
+//         getPromises.push(getPromise);
+//       }
+//       let query = performance.now();
+//       await Promise.all([...getPromises.map((el) => el())]);
+//       queries.push(performance.now() - query);
+//     }
+//   })();
+
+//   duration = performance.now() - start;
+//   querySpeed = (count * parallel) / 100000;
+//   queryDuration = queries.reduce((a, b) => a + b) / queries.length;
+//   parallelSpeed = duration / (count * parallel) / 10000;
+//   parallelDuration = duration / (count * parallel);
+
+//   return {
+//     duration, //общая длительность работы цикла
+//     querySpeed, //реальная средняя скорость запроса
+//     queryDuration, //реальное среднее время запроса
+//     parallelSpeed, //скорость в запросах в миллисекунду
+//     parallelDuration, //среднее время обработки запроса параллельно
+//   };
+// }
+
+// speedtest(() => delay(1000), 5, 5).then((result) => console.log(result));

+ 12 - 0
13/index.html

@@ -0,0 +1,12 @@
+<!DOCTYPE html>
+<html lang="en">
+  <head>
+    <meta charset="UTF-8" />
+    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
+    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
+    <title>Document</title>
+  </head>
+  <body>
+    <script src="index.js"></script>
+  </body>
+</html>

+ 104 - 0
13/index.js

@@ -0,0 +1,104 @@
+// practises
+
+// let str = "asdasdadsdsaads";
+
+// function checkSum(str) {
+//   let result = 0;
+//   for (let letter of str) {
+//     result += letter.charCodeAt();
+//   }
+//   return result;
+// }
+
+// console.log(checkSum(str));
+
+// function sign(data, salt) {
+//   const json = JSON.stringify(data);
+//   const sum = checkSum(json + salt);
+//   return json + sum;
+// }
+
+// console.log(sign({ id: 100500 }, "FBSALT"));
+
+// function verify(signed, salt) {
+//   const json = signed.slice(0, signed.lastIndexOf("}") + 1);
+//   const tokenSum = +signed.slice(signed.lastIndexOf("}") + 1);
+//   const sum = checkSum(json + salt);
+//   console.log(json, tokenSum, sum);
+//   return sum === tokenSum;
+// }
+
+// console.log(verify('{"id":100500}1317', "FBSALT"));
+
+// homework (unfinished)
+
+// localStorage.authToken =
+//   "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOnsiaWQiOiI2MWE0ZGIwZWM3NTBjMTJiYTZiYTQwMWYiLCJsb2dpbiI6ImFib2JhIiwiYWNsIjpbIjYxYTRkYjBlYzc1MGMxMmJhNmJhNDAxZiIsInVzZXIiXX0sImlhdCI6MTYzODE5NTk1Mn0.qyOhmkFMZk1Xqx-cx8FyI2LiWbYgJyPZLOzk4Ng_zDY";
+
+// const originalFetch = fetch;
+// fetch = (url, params = { headers: {} }) => {
+//   return originalFetch(url, params);
+// };
+
+// async function gql(url, query, variables) {
+//   let response = await fetch(url, {
+//     headers: {
+//       Accept: "application/json",
+//       "Content-Type": "application/json",
+//       Authorization: "Bearer " + localStorage.authToken,
+//     },
+//     body: JSON.stringify({ query, variables }),
+//   });
+//   return await response.json();
+// }
+
+// async function registration() {
+//   return await gql(
+//     "http://shop-roles.asmer.fs.a-level.com.ua/graphql",
+//     `mutation reg($login:String, $password:String){
+//       UserUpsert(user:{login:$login, password:$password, nick:$login}){
+//         _id login
+//       }
+//     }`,
+//     { login: "aboba", password: "123456" }
+//   );
+// }
+
+// async function login() {
+//   return await gql(
+//     "http://shop-roles.asmer.fs.a-level.com.ua/graphql",
+//     `mutation reg($login:String, $password:String){
+//       UserUpsert(user:{login:$login, password:$password, nick:$login}){
+//         _id login
+//       }
+//     }`,
+//     { login: "aboba", password: "123456" }
+//   );
+// }
+
+// async function getOrder() {
+//   return await gql(
+//     "http://shop-roles.asmer.fs.a-level.com.ua/graphql",
+//     `query o($q:String){
+//       OrderFind(query:$q){
+//         _id total orderGoods{
+//           price count total
+//           good{
+//             name categories{
+//               name
+//             }
+//           }
+//         }
+//       }
+//     }`,
+//     { q: "[{}]" }
+//   );
+// }
+
+// async function showData() {
+//   registration();
+//   login();
+//   getOrder();
+// }
+
+// console.log(showData());