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

130
Views
La clase JS Promise confunde los valores de retorno en el comportamiento encadenado

Por favor ayúdenme a entender el siguiente comportamiento de la clase Promise. He pasado mucho tiempo leyendo instrucciones y documentación, pero no puedo resolver esto por mí mismo.

 const promise = new Promise(resolver=> setTimeout(resolver("i am resolver"), 1000) ) .then(resolvedParameter => el => {console.log(el); console.log(resolvedParameter)}) .then(upperFunc => upperFunc("log me this")) .then(() => console.log("do not care about the others")) .catch(e => (error = e)); promise.then(()=>console.log("test"));

Esta es la salida de la consola:

registrame esto

soy resolutor

no te preocupes por los demás

prueba

En la Promesa donde se usa setTimeout no se especificó ningún valor de retorno, se devolvió la cadena "soy resolver" y se usó en el primer entonces (). Supongo que cuando llamas al resolver (como una función de resolución de promesas) devuelve el parámetro pasado para el siguiente entonces ()

En el primer entonces(), el parámetro resuelto se pasa en una función que devuelve una función que se devolverá y luego se usará en el segundo entonces(), que es lógico, y se recuerda la cadena de la primera promesa ("Soy resolver") y utilizado correctamente.

¿Puedes hacer una función entonces () con la función de resolución y rechazo? Por favor, ayúdenme a comprender qué formas tenemos disponibles para pasar datos de la primera promesa a la siguiente función, luego () y qué se espera que se devuelva desde la función entonces (). (Leí y entendí que son nuevas Promesas pero aún así el comportamiento es un poco difícil de entender)

Gracias por leer esta pregunta y cualquier idea es bienvenida.

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

0

Para obtener información general, aquí hay diferentes formas de hacer una promesa resuelta:

 promise = new Promise(resolver => resolver('any value')); promise = Promise.resolve('any value'); promise = Promise.resolve().then(() => 'any value'); promise = (async () => 'any value')()

Son funcionalmente equivalentes. Todos devuelven una promesa que se resuelve con el valor 'any value' .

La función .then() obtiene, como primer argumento, lo que se resolvió previamente en la cadena y puede devolver tres formas diferentes:

  1. Si devuelve un valor normal, se pasa a la cadena como el valor resuelto.
  2. Si arroja un valor, ese valor se transmite a la cadena como rechazo.
  3. Si devuelve una promesa[1], entonces lo que esa promesa resuelva o rechace se transmite a lo largo de la cadena como valor resuelto o rechazo.

Todos sus ejemplos caen en la primera categoría. Aquí hay una lista de valores transmitidos en las promesas resueltas:

 "i am resolver" el => {console.log(el); console.log(resolvedParameter)} undefined // because that is what the above function returns when called undefined // because that is what the console.log returns undefined // again console.log return value

Aquí hay un ejemplo en el que he envuelto todos sus valores de retorno dentro de promesas:

 const promise = new Promise(resolver=> resolver(Promise.resolve("i am resolver")); ) .then(resolvedParameter => Promise.resolve(el => {console.log(el); console.log(resolvedParameter)})) .then(upperFunc => Promise.resolve(upperFunc("log me this"))) .then(() => Promise.resolve(console.log("do not care about the others"))) .catch(e => Promise.resolve(error = e)); promise.then(()=>Promise.resolve(console.log("test")));

Esto funciona de manera idéntica a su ejemplo, pero espero que ahora quede claro qué se transmite en la cadena.

Como han mencionado otros, el segundo argumento de .then() se llama cuando se pasa el rechazo de la cadena. Funciona igual que el método .catch() . .then(undefined, someFunc) es lo mismo que .catch(someFunc) .

[1] Estrictamente, también puede ser un "thenable", algo que tiene un método then , pero ese es un caso especial.

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!