Promesse

Promesse

Medio

Introduzione

Prima dell'introduzione della classe Promise, c'era un solo modo per gestire il codice asincrono: il pattern callback.

Una callback è una funzione che viene passata come argomento a un'altra funzione e verrà chiamata quando un'azione all'interno di quell'altra funzione è terminata. Un pattern comune per queste funzioni callback è che accettano un "error" come primo parametro (vedi l'esempio qui sotto).

function callback(error, arg2, arg3) {}

Come si collega tutto questo al codice asincrono?

Storicamente, le callback sono state usate per permetterci di svolgere del lavoro dopo che un'attività asincrona era stata completata, senza bloccare l'intero programma.

fetchProduct(productId, function (error, data) {
  if (error) {
    // Handle the error
  } else {
    // Do some work
  }
});

Nell'esempio qui sopra, la funzione fetchProduct (che è asincrona) prende una callback come secondo argomento, che decide cosa fare quando i dati del prodotto sono stati recuperati.

Istruzioni

Questo esercizio ha due obiettivi:

  1. Implementa una funzione promisify che trasforma una funzione che usa il «pattern callback» in una funzione che restituisce una Promise. Guarda l'esempio qui sotto.
function fetchProduct(productId, function(error, data) {
    if (error) {
        // Handle the error
    } else {
        // Make something with your data
    }
})

const fetchProductAsPromise = promisify(fetchProduct);

// Now you got a function `fetchProductAsPromise`
// that returns a promise
fetchProductAsPromise(productId)
    .then((data) => {})
    .catch((error) => {});
  1. Reimplementa i seguenti metodi integrati di Promise (senza usarli)
  • all: prende un array di promesse e si risolve quando tutte sono state risolte, oppure si rifiuta quando una di esse viene rifiutata.
  • allSettled: prende un array di promesse e si risolve quando tutte si risolvono o si rifiutano.
  • race: prende un array di promesse e si risolve o si rifiuta con il valore della prima promessa che si risolve o si rifiuta.
  • any: prende un array di promesse e si risolve quando una di esse si risolve, oppure si rifiuta quando tutte si rifiutano.
Modifica tramite GitHub Il link si apre in una nuova finestra o scheda
JavaScript Exercism

Vuoi iniziare Promesse?

Iscriviti a Exercism per imparare e padroneggiare JavaScript con 37 concetti159 esercizi e il mentoring di persone reali, tutto gratis.