Skip to content

Commit 31a0721

Browse files
Spanish translation day 18 of 30
1 parent f6e2e5d commit 31a0721

File tree

2 files changed

+275
-2
lines changed

2 files changed

+275
-2
lines changed

Spanish/dia_17_Web_storages/dia_17_web_storages.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
</div>
1616

17-
[<< Día 16](../dia_16_JSON/dia_16_json.md) | [Día 18 >>](..)
17+
[<< Día 16](../dia_16_JSON/dia_16_json.md) | [Día 18 >>](../dia_18_Promesas/dia_18_Promesas.md)
1818

1919
![Thirty Days Of JavaScript](../images/banners/day_1_17.png)
2020

@@ -230,4 +230,4 @@ localStorage.clear();
230230

231231
🎉 ¡FELICITACIONES! 🎉
232232

233-
[<< Día 16](../dia_16_JSON/dia_16_json.md) | [Día 18 >>](..)
233+
[<< Día 16](../dia_16_JSON/dia_16_json.md) | [Día 18 >>](../dia_18_Promesas/dia_18_Promesas.md)
Lines changed: 273 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,273 @@
1+
<div align="center">
2+
<h1> 30 Días de JavaScript: Promesas</h1>
3+
<a class="header-badge" target="_blank" href="https://www.linkedin.com/in/asabeneh/">
4+
<img src="https://img.shields.io/badge/style--5eba00.svg?label=LinkedIn&logo=linkedin&style=social">
5+
</a>
6+
<a class="header-badge" target="_blank" href="https://twitter.com/Asabeneh">
7+
<img alt="Twitter Follow" src="https://img.shields.io/twitter/follow/asabeneh?style=social">
8+
</a>
9+
10+
<sub>Autor:
11+
<a href="https://www.linkedin.com/in/asabeneh/" target="_blank">Asabeneh Yetayeh</a><br>
12+
<small> Enero, 2020</small>
13+
</sub>
14+
15+
</div>
16+
17+
[<< Día 17](../dia_17_Web_storages/dia_17_web_storages.md) | [Día 19>>](..)
18+
19+
![Thirty Days Of JavaScript](../images/banners/day_1_18.png)
20+
21+
- [Día 18](#día-18)
22+
- [Promesas](#promesas)
23+
- [Callbacks](#callbacks)
24+
- [Constructor de promesas](#constructor-de-promesas)
25+
- [Fetch API](#fetch-api)
26+
- [Async y Await](#async-y-await)
27+
- [Ejercicios](#ejercicios)
28+
- [Ejercicios: Nivel 1](#ejercicios-nivel-1)
29+
- [Ejercicios: Nivel 2](#ejercicios-nivel-2)
30+
- [Ejercicios: Nivel 3](#ejercicios-nivel-3)
31+
32+
# Día 18
33+
34+
## Promesas
35+
36+
Los seres humanos damos o recibimos una promesa para realizar alguna actividad en algún momento. Si cumplimos la promesa, hacemos felices a los demás, pero si no la cumplimos, puede provocar descontento. La promesa en JavaScript tiene algo en común con los ejemplos anteriores.
37+
38+
Una promesa es una forma de manejar operaciones asíncronas en JavaScript. Permite a los manejadores con un valor eventual de éxito o razón de fracaso de una acción asíncrona. Esto permite que los métodos asíncronos devuelvan valores como los métodos síncronos: en lugar de devolver inmediatamente el valor final, el método asíncrono devuelve una promesa de proporcionar el valor en algún momento en el futuro.
39+
40+
Una promesa está en uno de estos estados:
41+
42+
- pendiente: estado inicial, ni cumplido ni rechazado.
43+
- cumplido: significa que la operación se ha completado con éxito.
44+
- rechazado: significa que la operación ha fallado.
45+
46+
Una promesa pendiente puede ser cumplida con un valor, o rechazada con una razón (error). Cuando ocurre cualquiera de estas opciones, se llaman los manejadores asociados puestos en cola por el método _then_ de una promesa. (Si la promesa ya se ha cumplido o ha sido rechazada cuando se adjunta un manejador correspondiente, se llamará al manejador, por lo que no hay una condición de competencia entre una operación asíncrona que se completa y sus manejadores que se adjuntan).
47+
48+
Como los métodos _Promise.prototype.then()_ y _Promise.prototype.catch()_ devuelven promesas, pueden encadenarse.
49+
50+
## Callbacks
51+
52+
Para entender muy bien la promesa, entendamos primero la devolución de llamada. Veamos los siguientes callbacks. A partir de los siguientes bloques de código se notará, la diferencia entre callback y promesas.
53+
54+
- call back
55+
Veamos una función callback que puede tomar dos parámetros. El primer parámetro es err y el segundo es result. Si el parámetro err es falso, no habrá error, de lo contrario retornará un error.
56+
57+
En este caso el err tiene un valor y devolverá el bloque err.
58+
59+
```js
60+
//Callback
61+
const doSomething = (callback) => {
62+
setTimeout(() => {
63+
const skills = ["HTML", "CSS", "JS"];
64+
callback("It did not go well", skills);
65+
}, 2000);
66+
};
67+
68+
const callback = (err, result) => {
69+
if (err) {
70+
return console.log(err);
71+
}
72+
return console.log(result);
73+
};
74+
75+
doSomething(callback);
76+
```
77+
78+
```sh
79+
// después de 2 segundos se imprimirá
80+
It did not go well
81+
```
82+
83+
En este caso el err es falso y devolverá el bloque else que es el resultado.
84+
85+
```js
86+
const doSomething = (callback) => {
87+
setTimeout(() => {
88+
const skills = ["HTML", "CSS", "JS"];
89+
callback(false, skills);
90+
}, 2000);
91+
};
92+
93+
doSomething((err, result) => {
94+
if (err) {
95+
return console.log(err);
96+
}
97+
return console.log(result);
98+
});
99+
```
100+
101+
```sh
102+
// después de 2 segundos imprimirá las habilidades
103+
["HTML", "CSS", "JS"]
104+
```
105+
106+
### Constructor de promesas
107+
108+
Podemos crear una promesa utilizando el constructor Promise. Podemos crear una nueva promesa utilizando la palabra clave `new` seguida de la palabra `Promise` y seguida de un paréntesis. Dentro del paréntesis, toma una función `callback`. La función de callback de la promesa tiene dos parámetros que son las funciones _`resolve`_ y _`reject`_.
109+
110+
```js
111+
// sintaxis
112+
const promise = new Promise((resolve, reject) => {
113+
resolve("success");
114+
reject("failure");
115+
});
116+
```
117+
118+
```js
119+
// Promesas
120+
const doPromise = new Promise((resolve, reject) => {
121+
setTimeout(() => {
122+
const skills = ["HTML", "CSS", "JS"];
123+
if (skills.length > 0) {
124+
resolve(skills);
125+
} else {
126+
reject("Something wrong has happened");
127+
}
128+
}, 2000);
129+
});
130+
131+
doPromise
132+
.then((result) => {
133+
console.log(result);
134+
})
135+
.catch((error) => console.log(error));
136+
```
137+
138+
```sh
139+
["HTML", "CSS", "JS"]
140+
```
141+
142+
La promesa anterior se ha resuelto con resolución.
143+
Veamos otro ejemplo cuando la promesa se resuelve con el rechazo (reject).
144+
145+
```js
146+
// Promesa
147+
const doPromise = new Promise((resolve, reject) => {
148+
setTimeout(() => {
149+
const skills = ["HTML", "CSS", "JS"];
150+
if (skills.includes("Node")) {
151+
resolve("fullstack developer");
152+
} else {
153+
reject("Something wrong has happened");
154+
}
155+
}, 2000);
156+
});
157+
158+
doPromise
159+
.then((result) => {
160+
console.log(result);
161+
})
162+
.catch((error) => console.error(error));
163+
```
164+
165+
```sh
166+
Something wrong has happened
167+
```
168+
169+
## Fetch API
170+
171+
La API Fetch proporciona una interfaz para obtener recursos (incluso a través de la red). A cualquiera que haya utilizado XMLHttpRequest le resultará familiar, pero la nueva API ofrece un conjunto de funciones más potente y flexible. En este reto utilizaremos fetch para solicitar url y APIS. Además de esto, veamos una demostración del caso de uso de las promesas en el acceso a los recursos de la red utilizando la API fetch.
172+
173+
```js
174+
const url = "https://restcountries.com/v2/all"; // api de países
175+
fetch(url)
176+
.then((response) => response.json()) // acceder a los datos de la API como JSON
177+
.then((data) => {
178+
// obtener los datos
179+
console.log(data);
180+
})
181+
.catch((error) => console.error(error)); // manejo de errores si ocurre algo incorrecto
182+
```
183+
184+
## Async y Await
185+
186+
Async y await es una forma elegante de manejar las promesas. Es fácil de entender y limpio de escribir.
187+
188+
```js
189+
const square = async function (n) {
190+
return n * n;
191+
};
192+
193+
square(2);
194+
```
195+
196+
```sh
197+
Promesa {<resolved>: 4}
198+
```
199+
200+
La palabra _async_ delante de una función significa que esa función devolverá una promesa. La función cuadrada anterior en lugar de un valor devuelve una promesa.
201+
202+
¿Cómo accedemos al valor de la promesa? Para acceder al valor de la promesa, utilizaremos la palabra clave _await_.
203+
204+
```js
205+
const square = async function (n) {
206+
return n * n;
207+
};
208+
const value = await square(2);
209+
console.log(value);
210+
```
211+
212+
```sh
213+
4
214+
```
215+
216+
Ahora, como puedes ver en el ejemplo anterior escribiendo async delante de una función creamos una promesa y para obtener el valor de una promesa utilizamos await. Async y await van juntos, uno no puede existir sin el otro.
217+
218+
Vamos a obtener los datos de la API utilizando tanto el método promise como el método async y await.
219+
220+
- promesa
221+
222+
```js
223+
const url = "https://restcountries.com/v2/all";
224+
fetch(url)
225+
.then((response) => response.json())
226+
.then((data) => {
227+
console.log(data);
228+
})
229+
.catch((error) => console.error(error));
230+
```
231+
232+
- async y await
233+
234+
```js
235+
const fetchData = async () => {
236+
try {
237+
const response = await fetch(url);
238+
const countries = await response.json();
239+
console.log(countries);
240+
} catch (err) {
241+
console.error(err);
242+
}
243+
};
244+
console.log("===== async and await");
245+
fetchData();
246+
```
247+
248+
🌕 Eres consistente y has cumplido tu promesa, has llegado al día 18. Mantén tu promesa y resuelve el desafío con determinación. Has dado 18 pasos adelante en tu camino hacia la grandeza. Ahora haz algunos ejercicios para tu cerebro y tus músculos.
249+
250+
## Ejercicios
251+
252+
```js
253+
const countriesAPI = "https://restcountries.com/v2/all";
254+
const catsAPI = "https://api.thecatapi.com/v1/breeds";
255+
```
256+
257+
### Ejercicios: Nivel 1
258+
259+
1. Lee la API de los países utilizando fetch e imprime el nombre del país, la capital, los idiomas, la población y la superficie.
260+
261+
### Ejercicios: Nivel 2
262+
263+
1. Imprime todos los nombres de los gatos en la variable catNames.
264+
265+
### Ejercicios: Nivel 3
266+
267+
1. Lee el api de los gatos y encuentra el peso medio del gato en unidad métrica.
268+
2. Lee la api de países y descubre los 10 países más grandes
269+
3. Lea la api de los países y cuente el número total de lenguas del mundo utilizadas como oficiales.
270+
271+
🎉 ¡FELICITACIONES! 🎉
272+
273+
[<< Día 17](../dia_17_Web_storages/dia_17_web_storages.md) | [Día 19>>](..)

0 commit comments

Comments
 (0)