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

137
Vistas
Haga algo después de las promesas recorriendo una matriz y cumpliendo, reaccione javascript

La mayoría de las otras preguntas no dan cuenta de hacer algo después de Promises.all. Además, mi situación podría ser extraña.

Promise.all aún permite que lo siguiente se ejecute varias veces. Pero solo quiero que doSomethingWithResults(results) suceda una vez que finalicen todas las iteraciones.

Me veo obligado a usar promesas aquí, así que necesito encontrar una solución para "esperar" que terminen todas las promesas.

 const [results, setResults] = useState([]) const handleSubmit = (e) => { e.preventDefault(); const promises = []; stuff.map((thing) => { const thisIsAPromise = digitaloceantask.something(thing) promises.push(thisIsAPromise); uploadTask.on( "state_changed", () => { dosomething .then((thing) => { setResults((prevState) => [...prevState, result]); }); }) } ); const result = Promise.all(promises) } doSomethingWithResults(results) // This happens multiple times, instead of waiting for all promises to finish. Would an if statement help? })
about 4 years ago · Santiago Gelvez
1 Respuestas
Responde la pregunta

0

En este momento, las Promesas que está esperando son las de digitaloceantask.something , pero lo que realmente necesita son las que obtiene al llamar a .getDownloadURL , que debe devolverse a la cadena de alguna manera. Aunque .getDownloadURL parece devolver una Promesa, lamentablemente está anidada dentro de una devolución de llamada, por lo que deberá construir una Promesa que se resuelva cuando se ejecuta la devolución de llamada.

 const handleSubmit = (e) => { e.preventDefault(); Promise.all(stuff.map((thing) => new Promise((resolve) => { digitaloceantask .something(thing) .on( "state_changed", () => storage() .ref("something") .child(something.name) .getDownloadURL() // 2 images .then(resolve) // can an error handler be added here? .catch(reject)? ); }))) .then((newResults) => { setResults(newResults); // or setResults([...results, ...newResults]); doSomethingWithResults(newResults) }); // .catch(handleErrors); // don't forget this part, if it might reject };

Otro enfoque, si está actualizando otro estado durante esto, sería tener un gancho de efecto que se ejecute cuando se actualice el estado de los results .

 then((newResults) => { setResults(newResults); // or setResults([...results, ...newResults]); }); // .catch(handleErrors); // don't forget this part

y

 useEffect(() => { if (results.length) { doSomethingWithResults(results); } }, [results]);

En cambio, usar ese método puede ser más fácil si tiene otras actualizaciones de estado y necesita doSomethingWithResults para hacer referencia a los valores del renderizado más reciente.

about 4 years ago · Santiago Gelvez Denunciar
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