/** * È necessario scrivere una funzione asincrona, * che "dorma" per il numero di millisecondi specificato, * e poi termini con successo * / function sleep(duration) { } // Esempio const startTime = Date.now(); console.log("inizio a dormire..."); sleep(2000).then(() => { console.log("Svegliato dopo 2 secondi!"); console.log("Tempo trascorso: ", Date.now() - startTime); }); sleep(1000).then(() => { console.log("Svegliato dopo 1 secondo!"); console.log("Tempo trascorso: ", Date.now() - startTime); });
Frontend
Dato una funzione sincrona e un tempo in millisecondi. È necessario restituire una nuova versione di questa funzione, la cui esecuzione sia limitata dal tempo specificato. Se la funzione viene eseguita entro il tempo, la promessa si risolve con i dati ottenuti. Se non, la promessa viene rifiutata con la stringa 'time limit exceeded'.
Ci sono problemi nell'aggiunta di nuovi metodi ai prototipi degli oggetti integrati?
Perché potrebbe essere necessario il metodo apply nella soluzione runOnce?
/** * Implementare la funzione sumPromises, che accetta * promesse come argomenti e restituisce la somma * dei loro risultati. * * La funzione può accettare qualsiasi numero di argomenti. * È possibile utilizzare qualsiasi API di promesse. */ // Codice qui // Esempio di utilizzo const promise1 = Promise.resolve(1); const promise2 = Promise.resolve(2); sumPromises(promise1, promise2).then(console.log); // 3
/** * La funzione `asyncAuth(callback)` accetta un callback, nel quale può * essere passato un errore (come primo argomento) e dati * dal backend (come secondo argomento). * asyncAuth((error, data) => {}); * * Devi implementare la funzione `auth()`, * che chiama `asyncAuth()`, ma restituisce una Promise. * * @returns {Promise} */ function auth() { return new Promise((resolve, reject) => { asyncAuth((error, data) => { if (error) { reject(error) } else { resolve(data) } }); }) } /** * La funzione `tryAuth()` utilizza `auth()` e, in caso di errore, * effettua N tentativi aggiuntivi. * Se tutti falliscono, restituisce l'ultimo errore. * * @returns {Promise} */ function tryAuth(n) { }
[nome] ha chiesto: Quanto tempo ci è voluto per implementare la versione MVP del lettore?
/** * Implementa la funzione wrapper runOnce, che accetta * una funzione e ne restituisce una nuova. La nuova funzione * può essere chiamata solo una volta, tutte le chiamate successive * restituiscono undefined. * * La funzione avvolta può accettare argomenti * e restituire un risultato. */ function runOnce(fn) { // il tuo codice } const logHello = (name) => { console.log(`ciao, ${name}!`) }; const logHelloOnce = runOnce(logHello); console.clear(); logHelloOnce('Oleg'); // 'ciao, Oleg!' logHelloOnce('Olga'); // undefined
/* È necessario scrivere una funzione per calcolare la somma di tutti i valori numerici in un array. Valori numerici validi sono anche stringhe, che iniziano con cifre. In questo caso, bisogna usare questa sequenza iniziale di cifre come valore numerico. L'array può contenere qualsiasi tipo di dato e non essere piatto. **Non si devono usare metodi integrati come .flat, .flatMap** */ function sum(arr) { // ... } console.log(sum([1, 'x', '2x', ['3', ['x2', '5']]]));
Come convertire arguments in un array nel vecchio modo (ES5), senza Array.from e spread-operator?
Quali novità dello standard ES6 sono utilizzate nel codice scritto? Cos'è l'oggetto arguments e come si differenzia dai parametri rest?
Può parlare degli approcci architettonici che ha utilizzato nel progetto? Conosce il Feature-Sliced Design (FSD)?
[nome] ha chiesto: Come veniva generalmente organizzato il lavoro su un compito specifico: chi lo portava e lo preparava, come avveniva il processo di approvazione, quali domande sorgevano durante l'implementazione e come le risolvevate?
Implementa la funzione asyncAuth con un'interfaccia di callback che restituisce una Promise. Quindi implementa la funzione tryAuth(n), che utilizza asyncAuth e, in caso di errore, effettua n tentativi aggiuntivi. Se tutti i tentativi falliscono, restituisce l'ultimo errore.
/** * Sono tre sezioni di codice. È necessario scrivere il risultato di ogni 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);
Implementa la funzione withTimeout, che prende una funzione e un tempo (millisecondi) e restituisce una nuova funzione. Se la funzione originale non viene eseguita entro il tempo stabilito, la promessa deve essere rifiutata.
Cosa succede se non si pulisce il timeout dopo l'esecuzione riuscita della funzione? Come si può risolvere e quale metodo di promessa sarebbe adatto per pulire il timeout in ogni caso (successo e errore)?
[nome] ha chiesto: Quale framework di test è stato usato?
/** * La funzione `asyncAuth(callback)` accetta un callback, nel quale * può essere passata un errore (come primo argomento) e dati * dal backend (come secondo argomento). * asyncAuth((error, data) => {}); * * Devi implementare la funzione `auth()`, * che chiama `asyncAuth()`, ma restituisce una Promise. * * @returns {Promise} */ function auth() { // asyncAuth((error, data) => {}); } /** * La funzione `tryAuth()` utilizza `auth()` e, in caso di errore, * effettua N tentativi aggiuntivi. * Se tutti falliscono, restituisce l'ultimo errore. * * @returns {Promise} */ function tryAuth(n) { }
Come calcolare il numero massimo di connessioni WebSocket simultanee se si conoscono la velocità di creazione delle connessioni e la durata media della sessione?