Promesas

Promesas

Intermedia

Introducción

Antes de que se introdujera la clase Promise, solo había una forma de manejar el código asíncrono: el patrón de callback.

Un callback es una función que se pasa como argumento a otra función y que se llamará una vez que haya terminado alguna acción en esa otra función. Un patrón común para esas funciones de callback es que aceptan un «error» como primer parámetro (ver el ejemplo a continuación).

function callback(error, arg2, arg3) {}

¿Cómo se relaciona esto con el código asíncrono?

Históricamente, los callbacks se han usado para poder hacer algo de trabajo después de que se completara una tarea asíncrona y sin bloquear todo el programa.

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

En el ejemplo anterior, la función fetchProduct (que es asíncrona) recibe un callback como segundo argumento que decide qué hacer cuando se han obtenido los datos del producto.

Instrucciones

Los dos objetivos de este ejercicio son:

  1. Implementa una función promisify que convierta una función que usa el «patrón de callback» en una función que devuelve una Promise. Mira el ejemplo a continuación.
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 los siguientes métodos integrados de Promise (sin usarlos)
  • all: recibe un array de promesas y se resuelve cuando todas ellas se resuelven, o se rechaza cuando una de ellas se rechaza.
  • allSettled: recibe un array de promesas y se resuelve cuando todas ellas se resuelven o se rechazan.
  • race: recibe un array de promesas y se resuelve o se rechaza con el valor de la primera promesa que se resuelva o se rechace.
  • any: recibe un array de promesas y se resuelve cuando una de ellas se resuelve, o se rechaza cuando todas ellas se rechazan.
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
JavaScript Exercism

¿Todo listo para empezar Promesas?

Regístrate en Exercism para aprender y dominar JavaScript con 37 conceptos159 ejercicios y mentoría humana real, todo gratis.