如何获得承诺的价值?

我正在从Angular的$q文档看这个例子,但我认为这可能适用于一般的承诺。 他们有这个例子,逐字抄写他们的评论:

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

我不清楚这是如何工作的。 如果我可以对第一个.then()的结果调用.then() ,将它们链接起来,我知道我可以,那么promiseBObject类型的承诺对象。 这不是一个Number 。 那么它们的意思是“它的价值将会是promiseA增加1的结果”呢?

我应该访问那个promiseB.value或类似的东西? 成功回调如何返回承诺并返回“result + 1”? 我错过了一些东西。


promiseAthen函数返回一个新的promise( promiseB ),在promiseA解析后立即解析,它的值是promiseA成功函数返回值的值。

在这种情况下, promiseA用值 - result解析,然后立即使用result + 1的值解析promiseB

访问promiseB的值以与我们访问promiseA的结果相同的方式完成。

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

当承诺被解决/拒绝时,它将调用其成功/错误处理程序:

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

then方法还返回一个promise:promiseB, 根据promiseA的成功/错误处理程序的返回值将被解析/拒绝。

有三种可能的价值承诺A的成功/错误处理程序可以返回,这会影响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

有了这个理解,你可以理解以下几点:

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

当时的调用立即返回promiseB。 当promiseA得到解决时,它会将结果传递给promiseA的成功处理程序。 由于返回值是promiseA的结果+1,因此成功处理程序正在返回一个值(上面的选项2),因此promiseB将立即解析,并且promiseB的成功处理程序将传递promiseA的结果+1。


.then promiseB的函数接收取之于返回.then promiseA的功能。

这里promiseA返回的是一个数字,它将在promiseB的成功函数中作为number参数提供。 然后将增加1

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

上一篇: How to access the value of a promise?

下一篇: jQuery Deferred continue to resolve after fail handler