Pre každý z troch fragmentov JavaScript kódu určite, čo bude vypísané do konzoly, a vysvetlite rozdiely v správaní primitiv, objektov a prepisovania odkazov.
Frontend
/** * Je potrebné napísať asynchrónnu funkciu, * ktorá bude "spať" stanovený počet milisekúnd, * a potom úspešne ukončí * / function sleep(duration) { } // Príklad const startTime = Date.now(); console.log("začiatok spánku..."); sleep(2000).then(() => { console.log("Prebudiť sa po 2 sekundách!"); console.log("Uplynulý čas: ", Date.now() - startTime); }); sleep(1000).then(() => { console.log("Prebudiť sa po 1 sekunde!"); console.log("Uplynulý čas: ", Date.now() - startTime); });
Daná je synchronná funkcia a čas v milisekundách. Je potrebné vrátiť novú verziu tejto funkcie, ktorej vykonanie je obmedzené zadaným časom. Ak sa funkcia vykoná v stanovenom čase, sľub sa vyrieši s získanými údajmi. Ak nie, sľub sa zamietne s reťazcom 'time limit exceeded'.
/** * Implementujte funkcijo sumPromises, ki sprejema * obljube kot argumente in vrne vsoto * njihovih rezultatov. * * Funkcija lahko sprejme poljubno število argumentov. * Lahko uporabite katerikoli Promise API. */ // Koda tukaj // Primer uporabe const promise1 = Promise.resolve(1); const promise2 = Promise.resolve(2); sumPromises(promise1, promise2).then(console.log); // 3
/** * Implementujte funkciu runOnce, ktorá prijíma * funkciu a vracia novú funkciu. Nová funkcia * môže byť volaná iba raz, všetky * nasledujúce volania vracajú undefined. * * Obalená funkcia môže prijímať argumenty * a vracať výsledok. */ function runOnce(fn) { // váš kód } const logHello = (name) => { console.log(`ahoj, ${name}!`) }; const logHelloOnce = runOnce(logHello); console.clear(); logHelloOnce('Oleg'); // 'ahoj, Oleg!' logHelloOnce('Olga'); // undefined
/* Je potrebné napísať funkciu na spočítanie všetkých číselných hodnôt v poli. Platné číselné hodnoty sú tiež reťazce, ktoré začínajú číslicami. V takom prípade je potrebné použiť túto počátečnú sekvenciu číslic ako číselnú hodnotu. Pole môže obsahovať akékoľvek typy dát a nemusí byť ploché. **Nesmú sa používať vstavané metódy ako .flat, .flatMap** */ function sum(arr) { // ... } console.log(sum([1, 'x', '2x', ['3', ['x2', '5']]]));
Existujú problémy s pridávaním nových metód do prototypov vstavaných objektov?
[meno] sa opýtal: Koľko času trvalo implementovať MVP verziu prehrávača?
/** * Funkcia `asyncAuth(callback)` prijíma callback, do ktorého * je možné odovzdať chybu (ako prvý argument) a údaje * zo servera (ako druhý argument). * asyncAuth((error, data) => {}); * * Musíte implementovať funkciu `auth()`, * ktorá volá `asyncAuth()`, ale vracia Promise. * * @returns {Promise} */ function auth() { return new Promise((resolve, reject) => { asyncAuth((error, data) => { if (error) { reject(error) } else { resolve(data) } }); }) } /** * Funkcia `tryAuth()` používa `auth()` a v prípade chyby * robí N ďalších pokusov. * Ak všetky zlyhajú, vráti poslednú chybu. * * @returns {Promise} */ function tryAuth(n) { }
Ako previesť arguments na pole starým spôsobom (ES5), bez Array.from a spread-operatora?
Aké novinky zo štandardu ES6 sa používajú v napísanom kóde? Čo je objekt arguments a čím sa líši od rest parametrov?
/** * Dajú sa tri časti kódu. Je potrebné napísať výsledok každého console.log. */ var n = 1; function F(n) { n = 3; } F(n); console.log(n); var obj = { a: 1 }; function F1(o) { o.a = 5; } F1(obj); console.log(obj); var obj = { a: 1 }; function F2(o) { o = { hello: 1 }; } F2(obj); console.log(obj);
Môžete nám povedať o architektonických prístupoch, ktoré ste použili v projekte? Poznáte Feature-Sliced Design (FSD)?
[meno] sa opýtal: Čo ste niekedy pracovali na optimalizácii metrík rýchlosti služieb?
[meno] sa opýtal: Čo si niekedy sám napísal ďalšie úlohy v pipeline?
[meno] sa opýtal: Ako bolo všeobecne organizované práce na konkrétnej úlohe: kto ju priniesol a pripravil, ako prebiehal proces schvaľovania, aké otázky sa objavili počas realizácie a ako ste ich riešili?
Čo sa stane, ak po úspešnom vykonaní funkcie nevyčistíme timeout? Ako to opraviť a ktorá metóda promise by bola vhodná na vyčistenie timeoutu v každom prípade (úspech a chyba)?
Implementujte funkciu withTimeout, ktorá prijíma funkciu a čas (milisekundy) a vracia novú funkciu. Ak sa pôvodná funkcia nevykoná v stanovenom čase, sľub by mal byť zamietnutý.
Implementujte funkciu asyncAuth s callback rozhraním, ktorá vracia Promise. Potom implementujte funkciu tryAuth(n), ktorá používa asyncAuth a v prípade chyby vykoná n ďalších pokusov. Ak všetky pokusy zlyhajú, vráti poslednú chybu.
/** * Funkcia `asyncAuth(callback)` prijíma callback, do ktorého * môže byť odovzdaná chyba (ako prvý argument) a údaje * zo backendu (ako druhý argument). * asyncAuth((error, data) => {}); * * Musíte implementovať funkciu `auth()`, * ktorá volá `asyncAuth()`, ale vracia Promise. * * @returns {Promise} */ function auth() { // asyncAuth((error, data) => {}); } /** * Funkcia `tryAuth()` používa `auth()` a v prípade chyby, * robí N ďalších pokusov. * Ak všetky zlyhajú, vráti poslednú chybu. * * @returns {Promise} */ function tryAuth(n) { }