Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Programación Funcional en Javascript: Promesas

Programación Funcional en Javascript: Promesas

En esta charla repasaremos los conceptos básicos y paradigmas de la programación funcional en Javascript, y exploraremos el uso de promesas para manejar y componer operaciones asíncronas de una forma sencilla y segura.

Quito Lambda

January 31, 2018
Tweet

More Decks by Quito Lambda

Other Decks in Programming

Transcript

  1. Agenda ✘ Introducción a la programación funcional ✘ Programación funcional

    en Javascript ✘ Operaciones asíncronas ✘ Preguntas
  2. Los programas deben ser escritos para que la gente los

    lea, y sólo incidentalmente para que las máquinas los ejecuten Albert Einstein Harold Abelson
  3. Funciones ✘ Relaciona un conjunto de entrada con un conjunto

    de salidas ✘ Cada valor de entrada tiene exactamente un valor de salida x y 0 0 1 1 2 4 3 9
  4. Funciones en Javascript ✘ Entrada: Argumento(s) Salida: Valor de retorno

    ✘ Pueden estar asociadas a un nombre o ser anónimas (Lambdas)
  5. Pureza ✘ Produce la misma salida siempre para una entrada

    específica ✘ Se puede reemplazar la llamada a la función por su valor de retorno (transparencia referencial) ✘ No produce efectos secundarios
  6. En Resumen... ✘ Funciones pequeñas de responsabilidad única ✘ No

    hay efectos colaterales, menor riesgo de bugs ✘ No hay mutación, menor riesgo de bugs ✘ Facilita el refactoring
  7. Map ✘ Ejecuta una función sobre los elementos de una

    lista y devuelve una nueva lista con el resultado
  8. Filter ✘ Ejecuta una función (predicado) sobre los elementos de

    una lista y conserva aquellos para los que dicha función devuelva “true”
  9. Reduce ✘ Ejecuta una función sobre los elementos de una

    lista y guarda el valor de retorno en un acumulador. Finalmente devuelve el valor acumulado
  10. Operaciones Asíncronas Basado en “What the heck is the event

    loop anyway?” de Philip Roberts - JSConf EU 2014
  11. Javascript Es un lenguaje de un solo hilo, sin interrupción,

    asíncrono y concurrente Tiene una pila de ejecución, un bucle de eventos una cola de callbacks acceso a Otras APIs (Y algunas otra cosas)
  12. Javascript Es un lenguaje de un solo hilo, sin interrupción,

    asíncrono y concurrente Tiene una pila de ejecución, un bucle de eventos una cola de callbacks acceso a Otras APIs (Y algunas otra cosas)
  13. Callback ✘ Función que se pasa a otra función como

    argumento ✘ Es ejecutada luego de algún tipo de evento, generalmente asíncrono
  14. Asincronía al Rescate Pila de Ejecución Web APIs Cola de

    Callbacks main() setTimeout(cb, 1000) timer(...) cb cb cb() ↺
  15. ✘ Hello ✘ Goodbye ✘ Hello again ✘ Hello ✘

    Hello again ✘ Goodbye setTimeout(..., 0) ?
  16. Manejo de Errores ✘ Convención de Node.js: Error first ✘

    Si no existe error se procesan los datos
  17. Qué es una Promesa? ✘ Objeto para computación asíncrona ✘

    Representa el resultado eventual de una operación asíncrona ✘ Sirve como un “placeholder” donde se pueden materializar dos valores distintos: ◦ Valor de un resultado exitoso ◦ Valor de la razón del error
  18. Estados de una Promesa ✘ Pendiente: Cuando el resultado todavía

    no se conoce porque la operación asíncrona no ha terminado ✘ Resuelta: Cuando la operación terminó exitosamente y se tiene un valor ✘ Rechazada: Cuando la operación asíncrona falló y la promesa no se puede completar. Incluye el motivo del error Pendiente Resuelta Rechazada Valor Error
  19. Encadenando Promesas ✘ La cadena continúa con .then ✘ Recibe

    el valor de salida de la anterior función ✘ Similar a composición ✘ En algunas librerías existe .tap, que permite acceder a la salida anterior sin romper la cadena
  20. Manejo de Errores ✘ La función .catch() maneja los errores

    de la cadena de promesas. ✘ La cadena se rompe cuando alguna promesa es rechazada ✘ Desde catch se puede obtener el objeto de error
  21. Coordinando Múltiples Promesas Cuando necesito conocer el resultado de todas

    las promesas Promise.all Cuando necesito conocer solo el resultado de la primera promesa finalizada Promise.race
  22. Cuando necesito conocer el resultado de un número fijo de

    promesas Promise.join Implementación de map para promesas. Se puede usar en listas mixtas (Promesas / valores) Promise.map