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

468
Views
¿Cómo acceder al valor de una promesa?

Estoy viendo este ejemplo de los documentos de Angular para $q , pero creo que esto probablemente se aplica a las promesas en general. El siguiente ejemplo se copia textualmente de sus documentos con su comentario incluido:

 promiseB = promiseA.then(function(result) { return result + 1; }); // promiseB will be resolved immediately after promiseA is resolved and its value // will be the result of promiseA incremented by 1

No tengo claro cómo funciona esto. Si puedo llamar a .then() en el resultado del primer .then() , encadenándolos, lo cual sé que puedo hacer, entonces promiseB es un objeto de promesa, de tipo Object . No es un Number . Entonces, ¿qué quieren decir con "su valor será el resultado de la promesa A incrementada en 1"?

¿Se supone que debo acceder a eso como promiseB.value o algo así? ¿Cómo puede la devolución de llamada exitosa devolver una promesa Y devolver "resultado + 1"? me estoy perdiendo algo

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

La función then de la promiseA devuelve una nueva promesa ( promiseB ) que se resuelve inmediatamente después de que se resuelve la promiseA , su valor es el valor de lo que se devuelve de la función de éxito dentro de la promiseA .

En este caso, promiseA se resuelve con un valor- result y luego resuelve inmediatamente la promiseB con el valor de result + 1 .

Acceder al valor de promiseB se hace de la misma manera que accedimos al resultado de promiseA .

 promiseB.then(function(result) { // here you can use the result of promiseB });

Edición de diciembre de 2019 : async / await ahora es estándar en JS, lo que permite una sintaxis alternativa al enfoque descrito anteriormente. Ahora puedes escribir:

 let result = await functionThatReturnsPromiseA(); result = result + 1;

Ahora no hay promesaB, porque hemos desenvuelto el resultado de la promesaA usando await y puedes trabajar con él directamente.

Sin embargo, await solo se puede usar dentro de una función async . Entonces, para alejar un poco, lo anterior debería estar contenido así:

 async function doSomething() { let result = await functionThatReturnsPromiseA(); return result + 1; }
over 4 years ago · Santiago Trujillo Report

0

Cuando se resuelve/rechaza una promesa, llamará a su controlador de éxito/error:

 var promiseB = promiseA.then(function(result) { // do something with result });

El método then también devuelve una promesa: promiseB, que se resolverá/rechazará según el valor devuelto por el controlador de éxito/error de la promesaA .

Hay tres valores posibles que pueden devolver los controladores de éxito/error de la promesa A que afectarán el resultado de la promesa B:

 1. Return nothing --> PromiseB is resolved immediately, and undefined is passed to the success handler of promiseB 2. Return a value --> PromiseB is resolved immediately, and the value is passed to the success handler of promiseB 3. Return a promise --> When resolved, promiseB will be resolved. When rejected, promiseB will be rejected. The value passed to the promiseB's then handler will be the result of the promise

Armado con este entendimiento, puede dar sentido a lo siguiente:

 promiseB = promiseA.then(function(result) { return result + 1; });

La llamada entonces devuelve promesaB inmediatamente. Cuando se resuelve la promesaA, pasará el resultado al controlador de éxito de la promesaA. Dado que el valor de retorno es el resultado de la promesa A + 1, el controlador de éxito está devolviendo un valor (opción 2 anterior), por lo que la promesa B se resolverá de inmediato, y el controlador de éxito de la promesa B recibirá el resultado de la promesa A + 1.

over 4 years ago · Santiago Trujillo Report

0

La respuesta de pixelbits es correcta y siempre debe usar .then() para acceder al valor de una promesa en el código de producción.

Sin embargo, hay una manera de acceder al valor de la promesa directamente después de que se haya resuelto mediante el siguiente enlace interno no compatible de node.js:

 process.binding('util').getPromiseDetails(myPromise)[1]

ADVERTENCIA: process.binding nunca se pensó para usarse fuera del núcleo de nodejs y el equipo central de nodejs está buscando activamente desaprobarlo

https://github.com/nodejs/node/pull/22004 https://github.com/nodejs/node/issues/22064

over 4 years ago · Santiago Trujillo 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!