Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

138
Vistas
Problemas para entender el flujo de esta cadena de Promesa
async function chicks(nest, year) { let list = ""; await Promise.all(network(nest).map(async name => { list += `${name}: ${ await anyStorage(nest, name, `chicks in ${year}`) }\n`; })); return list; }

Se supone que esta función devuelve una lista de todos los nidos en una red junto con la cantidad de pollitos que nacieron en ellos durante el año. Network(nest) devuelve una matriz con el nombre de todos los nidos en la red, mientras que anyStorage devolverá el número de pollitos nacidos en un nido dado como una Promesa.

Lo que no entiendo son algunas de las cosas señaladas en el libro de texto.

El código está seriamente roto. Siempre devolverá solo una línea de salida, enumerando el nido que fue más lento en responder.

¿Puedes averiguar por qué?

El problema radica en el operador +=, que toma el valor actual de la lista en el momento en que la declaración comienza a ejecutarse y luego, cuando finaliza la espera, establece el enlace de la lista para que sea ese valor más la cadena agregada.

Pero entre el momento en que la declaración comienza a ejecutarse y el momento en que finaliza, hay una brecha asíncrona. La expresión del mapa se ejecuta antes de que se haya agregado algo a la lista, por lo que cada uno de los operadores += comienza desde una cadena vacía y termina, cuando finaliza su recuperación de almacenamiento, configurando la lista en una lista de una sola línea, el resultado de agregar su línea. a la cadena vacía.

No estoy muy seguro de por qué solo se registra una línea en la lista, una vez que el mapa pasa por el primer elemento de la matriz, ¿por qué la lista no se actualiza?

¿Y por qué la única línea que se registra es el nido más lento para responder? Dado que hay una espera delante de anyStorage? ¿No debería ser el último elemento de la matriz que se registra desde que la función se congela hasta que se resuelve la promesa?

Estoy confundido en cuanto a cómo funciona Promise cuando las promesas dentro de la matriz contienen otras promesas. A mi modo de ver, Promise.all contiene una serie de promesas (del mapa) que contienen promesas de anyStorage. Se supone que Promise.all muestra una matriz de los valores prometidos si todos se resolvieron. ¿Esto también funciona si las promesas dentro de la promesa también se resuelven?

Gracias por cualquier ayuda proporcionada.

about 4 years ago · Juan Pablo Isaza
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda