Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

unidades:06_promesas:01_justificacion [2014/08/15 23:46]
admin
unidades:06_promesas:01_justificacion [2014/08/30 11:13] (actual)
admin
Línea 1: Línea 1:
 ====== 6.1 Justificación ====== ====== 6.1 Justificación ======
-Una "​promesa"​ o también llamada "​futuro"​ es un objeto que actúa como proxy en los casos en los que no se puede retornar el verdadero valor ya que aun no se conoce pero no se puede bloquear la función esperando a que llegue. Es una forma de hacer las cosas en vez de usar las funciones de //​callback//​.+Una "​promesa"​ o también llamada "​futuro"​ es un objeto que actúa como proxy en los casos en los que no se puede retornar el verdadero valor porque aún no se conoce pero no se puede bloquear la función esperando a que llegue. Es una forma de hacer las cosas en vez de usar las funciones de //​callback//​.
  
 Voy a volver a explicarlo pero con un ejemplo: Voy a volver a explicarlo pero con un ejemplo:
-Al hacer una llamada Ajax con [[unidades:​03_servicios:​02_http|$http]],​ la llamada a ''​$http''​ no retorna ningún valor ya que aun no tiene dicho valor pero tampoco se puede bloquear esperando a que llegue. Pues realmente ​el servicio ''​$http'' ​si que retorna un //​valor//​. ​Esto que retorna es una **promesa** y como hemos dicho la promesa es un proxy que en un futuro contendrá el valor.+Al hacer una llamada Ajax con [[unidades:​03_servicios:​02_http|$http]],​ la llamada a ''​$http''​ no retorna ningún valor ya que aún no tiene dicho valor pero tampoco se puede bloquear esperando a que llegue. Pues en realidad ​el servicio ''​$http'' ​sí que retorna un //​valor//​. ​Ésto que retorna es una **promesa** ycomo hemos dichola promesa es un proxy que en un futuro contendrá el valor.
  
-Ahora que quizás ​entiendas ​la buena idea de las promesas, pasemos a la parte negativa. La promesa tendrá en un futuro el valor pero, ¿como ​nos enteramos que ahora la promesa ya tiene el valor? Pues usando una función de //​callback//​. **¿Como?​!!**, ​Pero no habíamos dicho que lo bueno de las promesas es evitar las funciones de //​callback//​.+Ahora que quizás ​ya entiendes ​la buena idea de las promesas, pasemos a la parte negativa. La promesa tendrá en un futuro el valor pero, ¿cómo ​nos enteramos ​de que ahora la promesa ya tiene el valor? Pues usando una función de //​callback//​. **¿Cómo?​!!**, ​¿No habíamos dicho que lo bueno de las promesas es evitar las funciones de //​callback//​?
  
 ===== Pirámide de la muerte ===== ===== Pirámide de la muerte =====
-Excepto en un caso que ya veremos mas adelante, realmente ​no podemos evitar las funciones de //​callback//​ pero si que podemos evitar lo que se llama la //pirámide de la muerte// (en ingles Pyramid of Doom)). La pirámide de la muerte se produce cuando dentro de una función de //​callback//​ hacemos otra llamada asíncrona que a su vez tiene otra función de //​callback//​ y dentro de esta nueva función de //​callback//​ hacemos otra llamada asíncrona, y así sucesivamente.+Realmente ​no podemos evitar las funciones de //​callback//​ pero sí que podemos evitar lo que se llama la //pirámide de la muerte// (en ingles Pyramid of Doom)). La pirámide de la muerte se produce cuando dentro de una función de //​callback//​ hacemos otra llamada asíncrona que a su vez tiene otra función de //​callback//​ y dentro de esta nueva función de //​callback//​ hacemos otra llamada asíncrona, y así sucesivamente.
  
-Podemos ver como queda la pirámide de la muerte en el siguiente ejemplo.+Podemos ver cómo queda la pirámide de la muerte en el siguiente ejemplo.
  
 Obtenemos el fichero json "​fichero1.json"​ y leemos el valor de "​importe"​ pero dentro volvemos a obtener el fichero "​fichero2.json"​ y obtenemos el valor del importe que sumamos al primer importe, .....y así hasta 4 veces. Obtenemos el fichero json "​fichero1.json"​ y leemos el valor de "​importe"​ pero dentro volvemos a obtener el fichero "​fichero2.json"​ y obtenemos el valor del importe que sumamos al primer importe, .....y así hasta 4 veces.
Línea 37: Línea 37:
 </​note>​ </​note>​
  
-Vemos como estamos añadiendo funciones dentro de funciones lo que crea que el código esté cada vez mas identado lo que crea una forma de pirámide y da nombre al problema.+Vemos cómo estamos añadiendo funciones dentro de funciones lo que hace que el código esté cada vez mas identado lo que crea una forma de pirámide y da nombre al problema.
  
-El problema de esto es que el código es poco modular, cada una de las funciones de //​callback//​ está dentro de la anterior, haciendo que separarlas sea complejo.+El problema de ésto es que el código es poco modular, cada una de las funciones de //​callback//​ está dentro de la anterior, haciendo que separarlas sea complejo.
  
 Veamos ahora el mismo ejemplo usando promesas Veamos ahora el mismo ejemplo usando promesas
Línea 61: Línea 61:
 </​sxh>​ </​sxh>​
  
-Aunque ​aun no hemos explicado ​como funcionan las promesas vemos en este ejemplo que ahora no hay 4 funciones ​independiente ​y que no están anidadas por lo que es mas sencillo separarlas en funciones ​independiente.+Aunque ​aún no hemos explicado ​cómo funcionan las promesasvemos en este ejemplo que ahora no hay 4 funciones ​independientes ​y que no están anidadas por lo que es mas sencillo separarlas en funciones ​independientes.
  
 ===== Otras ventajas ===== ===== Otras ventajas =====
-Siempre que se habla de las promesas se explican ​que resuelven el problema de la pirámide de la muerte pero desde mi punto de vista tienen otras ventajas que las hacen también útiles:+Siempre que se habla de las promesas se explica ​que resuelven el problema de la pirámide de la muerte pero desde mi punto de vista tienen otras ventajas que las hacen también útiles:
   * [[#​api_unificado|API Unificado]]   * [[#​api_unificado|API Unificado]]
   * [[#​resueltos_antes_de_llamar_al_controlador|Resueltos antes de llamar al controlador]]   * [[#​resueltos_antes_de_llamar_al_controlador|Resueltos antes de llamar al controlador]]
Línea 73: Línea 73:
  
 ==== API Unificado ==== ==== API Unificado ====
-En el entorno de JavaScript se produce mucho el fenómeno de llamadas asíncronas y el consiguiente uso de //​callbacks//​. ​Eso lleva a que tengamos de definir ​como son esos //​callbacks//​. Aunque puede parecer una tarea sencilla realmente hay muchas formas de hacer los //​callbacks//​, veamos ​algunos ejemplos.+En el entorno de JavaScript se produce mucho el fenómeno de llamadas asíncronas y el consiguiente uso de //​callbacks//​. ​Éso lleva a que tengamos de definir esos //​callbacks//​. Aunque puede parecer una tarea sencilla realmente hay muchas formas de hacer los //​callbacks//​. Veamos ​algunos ejemplos:
  
 Para poner las distintas formas , vamos a suponer lo siguiente. Para poner las distintas formas , vamos a suponer lo siguiente.
Línea 97: Línea 97:
 }); });
 </​sxh>​ </​sxh>​
-Ahora la función ''​llamadaAsincrona''​ retorna un objeto que tiene los métodos ''​sucess''​ y ''​error''​ a los que le pasamos a cada uno la función correspondiente.+Ahora la función ''​llamadaAsincrona''​ retorna un objeto que tiene los métodos ''​success''​ y ''​error''​ a los que le pasamos a cada uno la función correspondiente.
  
 <sxh js> <sxh js>
Línea 116: Línea 116:
 }); });
 </​sxh>​ </​sxh>​
-Este caso es como el anterior pero en vez de pasar 2 argumentos en las funciones de //​callback// ​solo se pasa un solo objeto que tiene como propiedades los 2 valores.+Este caso es como el anterior pero en vez de pasar 2 argumentos en las funciones de //​callback// ​sólo se pasa un solo objeto que tiene como propiedades los 2 valores.
  
-Como vemos hay muchas formas de hacer las funciones de //​callback//​. Usando el API de promesas de AngularJS en nuestro código unificaremos la forma de trabajar de toda la aplicación.+Como vemoshay muchas formas de hacer las funciones de //​callback//​. Usando el API de promesas de AngularJS en nuestro código unificaremos la forma de trabajar de toda la aplicación.
  
 <note important>​ <note important>​
-Hay que decir que el servicio [[unidades:​03_servicios:​02_http|$http]] no es exactamente una promesa por lo que el propio AngularJS no ha pretendido tener un solo API. El motivo de ello supongo que habrá sido el facilitar el uso del servicio de ''​$http''​ pero personalmente creo que ha sido un error , yo hubiera obligado a usar siempre todo como promesas.+Hay que decir que el servicio [[unidades:​03_servicios:​02_http|$http]] no es exactamente una promesa por lo que el propio AngularJS no ha pretendido tener un sólo API. El motivo de ello supongo que habrá sido el facilitar el uso del servicio de ''​$http''​ pero personalmente creo que ha sido un error. Yo hubiera obligado a usar siempre todo como promesas ​y no añadir métodos adicionales para facilitar su uso.
 </​note>​ </​note>​
  
Línea 134: Línea 134:
  
 ==== Resueltos antes de llamar al controlador ==== ==== Resueltos antes de llamar al controlador ====
-Lo que vamos a explicar ahora es para mi la mayor ventana ​de  las promesas y es el verdadero motivo por el que las explico ahora en vez de dejarlas como algo avanzado para el final.+Lo que vamos a explicar ahora es para mí la mayor ventaja ​de las promesas y es el verdadero motivo por el que las explico ahora en vez de dejarlas como algo avanzado para el final.
  
-Hemos visto en los controladores ​como hacemos llamadas a ''​$http''​ ( aunque sea a través de servicios )) para obtener los datos. ​Eso tiene un problema, la página ya se ha mostrado pero aun estamos esperando los datos. Lo ideal sería que el controlador tuviera los datos que necesita antes de mostrarse la página y antes de ejecutarse el controlador. Gracias a las promesas y al servicio de rutas de AngularJS ​esto es posible.+Hemos visto en los controladores ​cómo hacemos llamadas a ''​$http'' ​(( aunque sea a través de servicios )) para obtener los datos. ​Éso tiene un problema, la página ya se ha mostrado pero aún estamos esperando los datos. Lo ideal sería que el controlador tuviera los datos que necesita antes de mostrarse la página y antes de ejecutarse el controlador. De esa forma no veríamos la página con datos //en blanco// esperando la respuesta. Gracias a las promesas y al servicio de rutas de AngularJS ​ésto es posible.
  
-No vamos ahora a contar el sistema de rutas ni como funciona, eso lo dejamos para la próxima unidad pero solo repetir que gracias a las promesas podemos tener datos que se obtienen de forma asíncrona pero que llegarán al controlador antes de que éste se ejecute. Por lo que será como si fuera algo síncrono.+No vamos ahora a contar el sistema de rutas ni cómo funciona. Eso lo dejamos para la próxima unidad ​((Exactamente en el tema de [[unidades:​07_rutas:​04_resolve|Resolve]])) ​pero sólo repetir que gracias a las promesas podemos tener datos que se obtienen de forma asíncrona pero que llegarán al controlador antes de que éste se ejecute,  por lo que será como si fuera algo síncrono.
  
  
unidades/06_promesas/01_justificacion.txt · Última modificación: 2014/08/30 11:13 por admin
Ir hasta arriba
CC Attribution-Share Alike 3.0 Unported
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0