如何获得承诺的价值?
我正在从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()
,将它们链接起来,我知道我可以,那么promiseB
是Object
类型的承诺对象。 这不是一个Number
。 那么它们的意思是“它的价值将会是promiseA增加1的结果”呢?
我应该访问那个promiseB.value
或类似的东西? 成功回调如何返回承诺并返回“result + 1”? 我错过了一些东西。
promiseA
的then
函数返回一个新的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