Introduccion A La Programacion Asincrona
Introduccion A La Programacion Asincrona
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
Alvarez M. email=marcosdavidalvarez@gm
ail.com, c=VE
Fecha: 2020.05.28 16:07:01
-04'00'
Introducción
Pàgina: 2
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
Solicitudes AJAX
AJAX, acrónimo de Asynchronous JavaScript And XML (JavaScript asíncrono y XML), es una
técnica de desarrollo web para crear aplicaciones interactivas o RIA (Rich Internet Applications). Estas
aplicaciones se ejecutan en el cliente, es decir, en el navegador de los usuarios mientras se mantiene la
comunicación asíncrona con el servidor en segundo plano. De esta forma es posible realizar cambios
sobre las páginas sin necesidad de recargarlas, mejorando la interactividad, velocidad y usabilidad en las
aplicaciones.
Basándonos en este concepto podemos inferir que AJAX hace referencia a varias
tecnologías, las cuales nos permitirán actualizar nuestras aplicaciones o servicios web
continuamente sin tener que recargar nuestra vista. En estos temas utilizaremos algunas
de muchas herramientas para ir entendiendo como se trabaja con estos tipos de carga
asíncrona, De esta manera podemos garantizar el aprendizaje de cualquier herramienta
o código que nos permita la comunicación asíncrona con nuestros recursos.
Una vez entendido esto, vamos a desarrollar nuestro primer código usando
Javascript (JS) para realizar nuestra petición HTTP.
Pàgina: 3
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
En tal sentido podemos deducir que nuestras aplicaciones o páginas serán los
clientes que se encargaran de consumir los recursos de un servicio el cual será el
encargado de darnos las respuestas. Por tanto debemos desarrollar nuestro código, el
cual será el encargado de solicitar(petición) los recursos(respuesta) a nuestro servidor.
Vamos al código:
Para realizar una petición HTTP con JS necesitamos crear una instancia de una
clase que nos provea esta funcionalidad, esta instancia la crearemos usando
XMLHttpRequest dado que La interfaz se implementa como una clase. Por tanto
crearemos un archivo llamado ajax.js y agregaremos el siguiente código, el cual nos
creara la instancia del objeto .
Pàgina: 4
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
Con esta línea ya hemos definido nuestro objeto que se encargara de procesar
toda nuestra petición, lo siguiente que definiremos será la función que ejecutaremos una
ves obtengamos la respuesta del servidor. Para eso utilizaremos el método
onreadystatechange que nos provee el objeto XMLHttpRequest que acabamos de
instanciar.
Con base en esto crearemos una función vaciá con el fin de asignarla a al método
onreadystatechange de nuestro objeto, la cual será llamada cuando la propiedad
readyState cambie.
Pàgina: 5
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
Pàgina: 6
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
Notamos
rápidamente que tenemos varios endpoint para las solicitudes, en nuestro caso
utilizaremos el endpoint que nos permitirá obtener los posts, nuestra ruta final será
(“/posts”), En este caso la ruta completa de la petición que crearemos será:
“https://jsonplaceholder.typicode.com/posts”
Si ingresamos a esta ruta desde el navegador nos muestra una estructura JSON
con todos los posts de prueba que nos ofrece este servidor.
Pàgina: 7
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
Si aún tenemos alguna duda, podemos consultar con la herramienta que nos
ofrece el navegador, en mi caso usare Chrome DevTools, en los navegadores por lo
general las herramientas de depuración son similares, para acceder a estas
herramientas en nuestro navegador, damos click con el botón derecho para abrir el
menú contextual y seleccionamos inspeccionar código o utilizamos la tecla de acceso
rápido f12.
Pàgina: 8
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
Pàgina: 10
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
Si damos click para ver sus detalles podemos verificar toda la información de la
solicitud que ha lanzado nuestro navegador, en donde podemos comprobar que es una
solicitud de tipo GET.
Pàgina: 12
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
¡Eureka!
ajax.js
Pàgina: 13
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
index.html
Una ves creado los archivos y vinculado como se muestra en la línea 5 del index.html,
abrimos nuestro index.html en el navegador.
Pàgina: 14
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
A simple vista parece haber pasado nada más que nuestro texto en el HTML, pero si
examinamos la consola de nuestro navegador como lo hicimos anteriormente.
Vemos que han salido varias solicitudes, entre ellas la solicitud de nuestra
petición al endpoint “/posts” del servicio https://jsonplaceholder.typicode.com/ (si no les
aparecen las solicitudes, deben recargar la página).
Vemos entonces que nuestro código está ejerciendo su función, Si entramos en nuestra
solicitud para ver sus detalles:
Pàgina: 15
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
visualizamos que nos muestra la URL a la cual se realizo la solicitud, el tipo de solicitud
que hemos hecho, en este caso GET, y el STATUS con un valor de 200 que nos indica
que fue exitoso.
Pàgina: 16
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
es el mismo contenido del post que vimos directamente desde el navegador pero esta
vez a través de una petición ajax.
Hasta ahora vemos que todo va bien, pero necesitamos manejar esa respuesta,
pues el usuario no va a inspeccionar el código para verificar las solicitudes y ver que
información le llego. Además no está visiblemente agradable. Para eso necesitamos
tomar los valores y mostrarlos en pantalla.
Pàgina: 17
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
Pàgina: 18
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
He añadido dos console.log() para poder visualizar en consola el flujo del código. Si
guardamos los cambios y cargamos nuevamente el index.html en el navegador, veremos
esta vez en la pestaña consola de nuestra herramienta de depuración como nuestra
función va imprimiendo como avanza nuestra petición.
Pàgina: 19
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
Pero esto solo nos indica que se completo el proceso, no si el proceso fue exitoso o si
ha fallado. Para poder ver como finalizo el proceso necesitamos revisar el STATUS.
Pàgina: 20
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
Para consultar el estado debemos consultar la propiedad status de nuestro objeto una
vez se haya completado la solicitud, para eso añadimos esta validación dentro del
bloque que nos indica que la petición se completo como se muestra a continuación en el
código:
Pàgina: 21
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
Hagamos una prueba para ver que ocurre en caso contrario, si cambiara mi URL
añadiéndole una “s” de mas para que quedara como “postss” la ruta estaría errada,
Pàgina: 22
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
El navegador nos indica que fallo, e incluso lo marca en rojo. Además si vemos los
detalles:
Pàgina: 23
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
Esto se debe a que la ruta no existe, debido a que hemos generado un fallo en nuestra
petición al indicarle una ruta desconocida, en este caso el servidor encargado de
manejar las solicitudes nos ha indicado que el servicio no esta disponible a traves del
status de nuestra solicitud. Y si vemos nuestra consola, encontraremos el mensaje que
establecimos cuando el estatus fuera distinto a 200
Hasta ahora vemos que todo el proceso y los flujos que establecimos van en el camino
correcto. Arreglemos nuestro endpoint quitando la “s” que añadimos de mas para que
todo vuelva a quedar funcional.
Una ves que implementemos nuestro código y recarguemos nuestro index.html veremos
lo siguiente:
Pàgina: 25
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
Para hacer algo sencillamente practico, vamos a recorrer todo nuestro array de objeto
para mostrarlo en el navegador.
Pàgina: 27
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
Lo primero que hicimos fue en la linea 13, tomar nuestra respuesta la cual viene como
String y convertirla en un array de objeto a través de la función JSON.parse(), luego la
almacenarlo en la variable PostArray.
Luego en la linea 14 creamos la variable out y la inicial izamos como un String vació, allí
se almacenaran todos los tags html con la información cuando recorramos los posts
dentro del bucle.
En la linea 16 inicializamos nuestro foreach para recorrer todo nuestro array de objeto,
luego haciendo uso de la interpolación empleada a partir de EcmaScript 6 hemos
concatenado nuestros contenedores HTML y el valor de cada objeto recorrido,
accediendo a ellos a través de su notación de puntos como se ve en la linea 19 y 20 y
almacenándolo en la variable out linea 17.
Pàgina: 28
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas
Funciones asincrónicas (Parte 1)
Marcos D. Alvarez M.
Email: [email protected]
Linkedin: https://www.linkedin.com/in/marcosdavidalvarezmarte
Hemos logrado que todos los posts se puedan visualizar sin problemas, de esta manera
alcanzamos hacer que la petición verificando todo el proceso mostrando su avance en
consola y su resultado en pantalla, ya quedaría mejorarlo visualmente con css. Pero ya
hemos creado nuestra primera petición a código con JS.
Para esta primera parte es bueno practicar y tratar de comprender cada uno de los
puntos tratado, Pueden ir consultando los avance en el repositorio provisto en el pie de
página para verificar los tutoriales publicados.
Con esta primera parte espero se hayan hecho una idea del funcionamiento asíncrono, y
como nos beneficiara en nuestras páginas y aplicaciones, permitiéndonos consultar en
cualquier momento los servicios y poder actualizar el contenido de nuestro sitio sin tener
que refrescar la página. Esto es solo una pequeña parte de las muchas que podemos
lograr con todas las herramientas que nos ofrecen los lenguajes para la carga
asíncrona.
Una vez comprendido esto, en la segunda parte abarcare las peticiones con jquery para
luego adentrarnos a los callbacks, promesas y async/await
Hasta la parte 2.
Pàgina: 30
Venezuela - 28/05/20
Ing. Marcos D. Alvarez M.
https://gitlab.com/dvlpersupp/peticiones-asincronas