Sobes.tech

Frontend

/* * Funktion, die das Anfordern von Daten vom Backend nachahmt. * Das Backend hat eine RPS-Beschränkung und wird fehlschlagen, * wenn die Anzahl der parallelen Anfragen MAX_PARALLEL_REQUESTS übersteigt. */ function requestData(id: number): Promise<string> { parallelRequests++; if (parallelRequests > MAX_PARALLEL_REQUESTS) { throw new Error("Zu viele parallele Anfragen"); } return new Promise((res) => { setTimeout(() => { parallelRequests--; return res(`${id * 2}`); }, Math.floor(Math.random() * 2000)) }); } function prepareData( ids: number[], maxParallelRequests: number, ): Promise<string[]> { /* * TODO: implementieren Sie die Anforderung aller Daten, * wobei nicht mehr als maxParallelRequests * parallele Verbindungen verwendet werden. */ }

125

Implementieren Sie einen benutzerdefinierten React-Hook useSubState, der den vollständigen Zustand, die setState-Funktion und den Namen des Schlüssels (Feld des Objekts) übernimmt und ein Tupel aus dem Wert dieses Feldes und der Funktion zu seiner Änderung zurückgibt — ähnlich wie useState, aber für ein bestimmtes Feld eines großen Zustandsobjekts.

114

function cloneDeep(something: Cloneable): Cloneable { /* * TODO: tiefe Kopie ohne JSON.parse/stringify implementieren */ return JSON.parse(JSON.stringify(something)); } function assertDeep(a: Cloneable, b: Cloneable) { if (JSON.stringify(a) !== JSON.stringify(b)) { console.error("Nicht OK"); } console.log("OK"); } const obj: Cloneable = { a: 1, b: true, c: "hallo", d: { there: "are", some: ["properties"] }, e: {}, f: [(), (), { key: { value: [1, 2, "3", "four"] } }], g: [] }; assertDeep(obj, cloneDeep(obj));

106