我正在从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()并将它们链接起来(据我所知),那么promiseBObject类型的promise对象。它不是Number。那么,它们的含义是“它的值将是promiseA的结果加1”?

我应该以promiseB.value或类似的方式访问它吗?成功回调如何返回 promise 并返回“结果+ 1”?我想念一些东西。

最佳答案

promiseAthen函数返回一个新的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;
}

07-24 17:52