/* * ფუნქცია, რომელიც იმიტაციას ახდენს მონაცემების მოთხოვნის შესახებ ბექენდიდან. * ბექენდს აქვს RPS შეზღუდვა და ჩავარდება, * თუ პარალელური მოთხოვნების რაოდენობა აღემატება MAX_PARALLEL_REQUESTS-ს. */ function requestData(id: number): Promise<string> { parallelRequests++; if (parallelRequests > MAX_PARALLEL_REQUESTS) { throw new Error("ძალიან ბევრი პარალელური მოთხოვნა"); } return new Promise((res) => { setTimeout(() => { parallelRequests--; return res(`${id * 2}`); }, Math.floor(Math.random() * 2000)) }); } function prepareData( ids: number[], maxParallelRequests: number, ): Promise<string[]> { /* * TODO: შეასრულეთ ყველა მონაცემის მოთხოვნა, * მაქსიმუმ maxParallelRequests * პარალელური კავშირებით. */ }
Frontend
React-ის პერსონალიზებული useSubState ჰუკის განხორციელება, რომელიც იღებს სრულ მდგომარეობას, setState ფუნქციას და გასაღების სახელწოდებას (ობიექტის ველს), და აბრუნებს ტუპს ამ ველის მნიშვნელობით და ფუნქციით მის შეცვლის — ანალოგიურად useState-ს, მაგრამ კონკრეტული ველისთვის დიდი მდგომარეობის ობიექტში.
function cloneDeep(something: Cloneable): Cloneable { /* * TODO: ღრმად კლონირება JSON.parse / stringify-ის გარეშე */ return JSON.parse(JSON.stringify(something)); } function assertDeep(a: Cloneable, b: Cloneable) { if (JSON.stringify(a) !== JSON.stringify(b)) { console.error("არ არის OK"); } console.log("კარგია"); } const obj: Cloneable = { a: 1, b: true, c: "გამარჯობა", d: { there: "are", some: ["properties"] }, e: {}, f: [(), (), { key: { value: [1, 2, "3", "four"] } }], g: [] }; assertDeep(obj, cloneDeep(obj));