我正在从Angular的docs中查看$q
的示例,但我认为这通常适用于Promise。下面的示例从他们的文档中逐字复制,并包含注释:
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
类型的promise对象。它不是Number
。那么,它们的含义是“它的值将是promiseA的结果加1”?我应该以
promiseB.value
或类似的方式访问它吗?成功回调如何返回 promise 并返回“结果+ 1”?我想念一些东西。 最佳答案
promiseA
的then
函数返回一个新的Promise(promiseB
),该新的Promise在promiseA
被解析后立即被解析,其值是promiseA
中从成功函数返回的值。
在这种情况下,promiseA
使用值result
解析,然后立即使用promiseB
的值解析result + 1
。
访问promiseB
的值的方式与访问promiseA
的结果的方式相同。
promiseB.then(function(result) {
// here you can use the result of promiseB
});
编辑于2019年12月:
async
/ await
现在已成为JS的标准配置,它允许上述方法使用另一种语法。您现在可以编写:let result = await functionThatReturnsPromiseA();
result = result + 1;
现在没有了promiseB,因为我们已经使用
await
解开了promiseA的结果,您可以直接使用它。但是,
await
只能在async
函数内部使用。因此,要略微缩小,必须像上面这样包含:async function doSomething() {
let result = await functionThatReturnsPromiseA();
return result + 1;
}