Promesas

Promesas

Media

Introducción

Antes de que se introdujera la clase Promise, había una sola forma de trabajar con 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 habitual en esas funciones callback es que acepten un «error» como primer parámetro (ver el ejemplo de abajo).

function callback(error, arg2, arg3) {}

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

Históricamente, los callbacks se han usado para permitirnos 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 de arriba, la función fetchProduct (que es asíncrona) toma 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 que aparece 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. Vuelve a implementar los siguientes métodos integrados de Promise (sin usarlos)
  • all: recibe un array de promesas y se resuelve cuando todas ellas se han resuelto, 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 pestaña nueva
JavaScript Exercism

¿Listo para empezar Promesas?

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