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

160
Views
Promise.allSettled donde la lista de promesas varía de forma incremental

Resultado: a , b , d , c . Esperado: a , b , c , d

 const promises = [] console.log('a') someFunc(promises) Promise.allSettled(promises).then(() => console.log('d')) function someFunc(promises) { const promise = new Promise(resolve => setTimeout(() => { console.log('b') const promise2 = new Promise(resolve2 => setTimeout(() => { console.log('c') resolve2() }, 3000)) promises.push(promise2) resolve() }, 3000)) promises.push(promise) return promise }

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Si bien sería posible parchearlo no empujando a una matriz, sino haciendo que cada Promesa se someFunc entre sí en alguna Función ...

 console.log('a') someFunc().then(() => console.log('d')) function someFunc() { return new Promise(resolve => setTimeout(() => { console.log('b') new Promise(resolve2 => setTimeout(() => { console.log('c') resolve2() }, 3000)) .then(resolve); }, 3000)) }

Una versión mucho más comprensible prometería setTimeout para empezar en lugar de hacerlo cada vez.

 const setTimeoutPromise = ms => new Promise(resolve => setTimeout(resolve, ms)); console.log('a') someFunc().then(() => console.log('d')) function someFunc() { return setTimeoutPromise(3000) .then(() => { console.log('b'); return setTimeoutPromise(3000) }) .then(() => { console.log('c'); return setTimeoutPromise(3000) }); }

Que se puede simplificar aún más con await ...

 const setTimeoutPromise = ms => new Promise(resolve => setTimeout(resolve, ms)); console.log('a') someFunc().then(() => console.log('d')) async function someFunc() { await setTimeoutPromise(3000); console.log('b'); await setTimeoutPromise(3000); console.log('c'); await setTimeoutPromise(3000); }

about 4 years ago · Juan Pablo Isaza Report

0

Solución

Sé que puede estar confundido con esta pregunta mucho. Aquí está la solución que encontré

 const promises = [] const timeout = ms => { const promise = new Promise(resolve => setTimeout(resolve, ms)) promises.push(promise) return promise } const someFunc = () => timeout(1000).then(() => { console.log('b') timeout(1000).then(() => console.log('c')) }) async function main() { console.log('a') someFunc() let i = 0; while (promises.length > i) { i = promises.length await Promise.allSettled(promises) } console.log('d') } main()

El problema que realmente quiero expresar es que el contenido de la función someFunc no se determina en el momento de la compilación, mientras que necesito asegurarme de que la función no deje efectos secundarios una vez ejecutada.

about 4 years ago · Juan Pablo Isaza 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!