Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

131
Views
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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!