A veces, solemos pasar funciones asíncronas con funciones forEach y map.
Por ejemplo:
[1,2,3,4,5].forEach(async (n) => setTimeout(console.log(n), 1000));
Resultado: Todos los números del 1 al 5 se imprimen uno tras otro, pero no hay un intervalo de 1 segundo después de imprimir cada línea.
Mira esta función javascipt:
async function doubleOf(n) {
return n*2;
}
Resultado: Esto en realidad está devolviendo una Promesa que se resuelve en un número.
Si escribimos un equivalente de TypeScript de esta función con tipos estrictos, aclarará las cosas.
El siguiente código no compilará:
async function doubleOf(n: number): number {
return n*2;
}
La versión correcta sería:
async function doubleOf(n: number): Promise<number> {
return n*2;
}
No se deje engañar por el azúcar sintáctico proporcionado por async-await. Si escribimos promesas puras sin usar async, la función anterior se vería así:
function doubleOf(n) {
return new Promise((resolve) => resolve(n*2));
}
function doubleOf(n: number): Promise<number> {
return new Promise((resolve) => resolve(n*2));
}
doubleOfuna función que toma un número y devuelve un número. Javascript simple y antiguo.doubleOfOldWayuna función que toma un número y devuelve una promesa que se resuelve en un número.doubleOfNewWay, una función asíncrona que toma un número y parece que devuelve un número, pero en realidad devuelve una promesa que se resuelve en un número como la doubleOfOldWayfunción.doubleOfOldWayy doubleOfNewWaylas funciones son exactamente las mismas.doubleOfOldWayy doubleOfNewWayfunciones, el resultado fue NaN, ya que no podemos multiplicar las promesas (¡obviamente!).doubleOfOldWayy doubleOfNewWay:[1,2,3,4,5].forEach(async (n) => setTimeout(console.log(n), 1000));
La forma más correcta de implementar lo que esperamos de esta función forEach es usando un bucle for simple:
for(const number of [1,2,3,4,5]) {
console.log(number);
await new Promise(resolve => setTimeout(resolve, 1000)); // Sleep for "atleast" 1 second
}
[1,2,3,4,5].map(async (n) => n*2);
(5) [Promise, Promise, Promise, Promise, Promise]
0: Promise {<fulfilled>: 2}
1: Promise {<fulfilled>: 4}
2: Promise {<fulfilled>: 6}
3: Promise {<fulfilled>: 8}
4: Promise {<fulfilled>: 10}
Para obtener una lista del doble de cada número, lo que podemos hacer es:
await Promise.all([1,2,3,4,5].map(async (n) => n*2));
[2, 4, 6, 8, 10]
Cuando realiza una solicitud a facebook.com, su computadora busca el nombre de dominio para traducir ese nombre de dominio en una dirección IP para que su computadora pueda hacer esa conexión.
Nuestro lenguaje es una herramienta poderosa que puede dar forma a nuestros pensamientos, actitudes y acciones. Incluso términos aparentemente inofensivos pueden perpetuar sesgos y estereotipos dañinos.
Es una mañana brillantemente dorada en las ondulantes colinas del oeste, mientras los primeros rayos del sol iluminan la hierba escarchada de las llanuras. Una manada de ganado Angus plácido, negro azabache y enorme, se recorta contra el amanecer mientras avanzan por un sendero trillado hacia un lugar que todos conocen bien; la barra de desayuno
En el panorama empresarial en rápida evolución actual, el concepto de trabajo híbrido y remoto ha ganado un impulso sin precedentes. A medida que las empresas continúan adaptándose a las necesidades y expectativas cambiantes de sus empleados, expertos de varios campos se han reunido para analizar los beneficios, los desafíos y el futuro de esta forma transformadora de trabajar.
A menudo nos encontramos luchando para implementar lo que sabemos que es bueno para nosotros. Desde decirle a un ser querido que lo amamos hasta recordar hablar como un pirata, siempre habrá quienes digan que no hace falta un día, una semana o un mes de eventos porque ya están haciendo esas cosas.
Cuando realiza una solicitud a facebook.com, su computadora busca el nombre de dominio para traducir ese nombre de dominio en una dirección IP para que su computadora pueda hacer esa conexión.