/* * Артка, бекендтен маалымат сурап жаткандай кылып иштелип чыккан. * Бекенд 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 функциясын жана ачкыч атын (объекттин талаасын) кабыл алат жана ошол талаанын мааниси менен аны өзгөртүүчү функциядан турган tuple кайтарат — 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("Туура эмес"); } 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));