Solución:
promiseA
‘s then
la función devuelve una nueva promesa (promiseB
) que se resuelve inmediatamente después promiseA
se resuelve, su valor es el valor de lo que se devuelve de la función de éxito dentro de promiseA
.
En este caso promiseA
se resuelve con un valor – result
y luego resuelve inmediatamente promiseB
con el valor de result + 1
.
Accediendo 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
});
Editar 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 puede trabajar con él directamente.
Sin embargo, await
solo se puede usar dentro de un async
función. Entonces, para alejar un poco, lo anterior debería estar contenido así:
async function doSomething() {
let result = await functionThatReturnsPromiseA();
return result + 1;
}
Cuando una promesa se resuelve / rechaza, llamará a su controlador de éxito / error:
var promiseB = promiseA.then(function(result) {
// do something with result
});
los then
El método también devuelve una promesa: promiseB, que será resuelta / rechazada dependiendo del valor de retorno del controlador de éxito / error de promiseA.
Hay tres valores posibles que los manejadores de éxito / error de promiseA pueden devolver que afectarán el resultado de promiseB:
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 entender lo siguiente:
promiseB = promiseA.then(function(result) {
return result + 1;
});
La llamada a continuación devuelve promesaB inmediatamente. Cuando se resuelva la promesaA, pasará el resultado al controlador de éxito de la promesaA. Dado que el valor de retorno es el resultado de la promesaA + 1, el controlador de éxito está devolviendo un valor (opción 2 anterior), por lo que promesaB se resolverá de inmediato y el controlador de éxito de la promesaB pasará al resultado de la promesa A + 1.
.then
función de la promesa B recibe lo que se devuelve .then
función de la promesa A.
aquí la promesa A está regresando es un número, que estará disponible como number
parámetro en función de éxito de la promesa B. que luego se incrementará en 1