How to access the value of a promise?

I'm looking at this example from Angular's docs for $q but I think this probably applies to promises in general. They have this example, copied verbatim with their comment included:

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

I'm not clear how this works. If I can call .then() on the result of the first .then() , chaining them, which I know I can, then promiseB is a promise object, of type Object . It is not a Number . So what do they mean by "its value will be the result of promiseA incremented by 1"?

Am I supposed to access that as promiseB.value or something like that? How can the success callback return a promise AND return "result + 1"? I'm missing something.


promiseA 's then function returns a new promise ( promiseB ) that is immediately resolved after promiseA is resolved, its value is the value of the what is returned from the success function within promiseA .

In this case promiseA is resolved with a value - result and then immediately resolves promiseB with the value of result + 1 .

Accessing the value of promiseB is done in the same way we accessed the result of promiseA .

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

When a promise is resolved/rejected, it will call its success/error handler:

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

The then method also returns a promise: promiseB, which will be resolved/rejected depending on the return value from the success/error handler from promiseA .

There are three possible values that promiseA's success/error handlers can return that will affect promiseB's outcome:

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

Armed with this understanding, you can make sense of the following:

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

The then call returns promiseB immediately. When promiseA is resolved, it will pass the result to promiseA's success handler. Since the return value is promiseA's result + 1, the success handler is returning a value (option 2 above), so promiseB will resolve immediately, and promiseB's success handler will be passed promiseA's result + 1.


.then function of promiseB receives what is returned from .then function of promiseA.

here promiseA is returning is a number, which will be available as number parameter in success function of promiseB. which will then be incremented by 1

链接地址: http://www.djcxy.com/p/55462.html

上一篇: 我如何在Rx Observable上“等待”?

下一篇: 如何获得承诺的价值?