Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

164
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda