Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

460
Vistas
¿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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda