/* * Артқы жақтан деректерді сұрауды имитациялайтын функция. * Артқы жақта 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
Толық күйді, setState функциясын және кілт атауын (объектінің өрісі) қабылдайтын, және осы өрістің мәні мен оны өзгерту функциясынан тұратын кортежді қайтаратын, жеке React хук useSubState-ті жүзеге асырыңыз — useState-ке ұқсас, бірақ үлкен күй объектісінің нақты өрісі үшін.
function cloneDeep(something: Cloneable): Cloneable { /* * TODO: JSON.parse/JSON.stringify қолданбай терең көшіруді жүзеге асырыңыз */ return JSON.parse(JSON.stringify(something)); } function assertDeep(a: Cloneable, b: Cloneable) { if (JSON.stringify(a) !== JSON.stringify(b)) { console.error("Жарамсыз"); } console.log("Дұрыс"); } const obj: Cloneable = { a: 1, b: true, c: "сәлем", d: { бар: "бар", кейбірі: ["қасиеттер"] }, e: {}, f: [(), (), { кілт: { мәні: [1, 2, "3", "төрт"] } }], g: [] }; assertDeep(obj, cloneDeep(obj));