Promises

Promises

Médio

Introdução

Antes de a classe Promise existir, só havia uma forma de lidar com código assíncrono: o padrão de callback.

Um callback é uma função que é passada como argumento a outra função e que será chamada assim que alguma ação nessa outra função terminar. Um padrão comum para essas funções de callback é aceitarem um "error" como primeiro parâmetro (vê o exemplo abaixo).

function callback(error, arg2, arg3) {}

E que relação tem isto com o código assíncrono?

Historicamente, os callbacks têm sido usados para nos permitir fazer algum trabalho depois de uma tarefa assíncrona terminar, e sem bloquear o programa todo.

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

No exemplo acima, a função fetchProduct (que é assíncrona) recebe um callback como segundo argumento, que decide o que fazer quando os dados do produto tiverem sido obtidos.

Instruções

Os dois objetivos deste exercício são:

  1. Implementa uma função promisify que transforma uma função que usa o "callback pattern" numa função que devolve um Promise. Vê o exemplo abaixo.
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 os seguintes métodos Promise incorporados (sem os usar)
  • all: recebe um array de promises e resolve quando todas elas estiverem resolvidas, ou rejeita quando uma delas for rejeitada.
  • allSettled: recebe um array de promises e resolve quando todas elas forem resolvidas ou rejeitadas.
  • race: recebe um array de promises e resolve ou rejeita com o valor da primeira promise que for resolvida ou rejeitada.
  • any: recebe um array de promises e resolve quando uma delas for resolvida, ou rejeita quando todas elas forem rejeitadas.
Editar via GitHub A ligação abre numa nova janela ou separador
JavaScript Exercism

Estás pronto para começar Promises?

Inscreve-te no Exercism para aprenderes e dominares JavaScript com 37 conceitos159 exercícios, e mentoria humana real, tudo grátis.