一尘不染

如何获得承诺的价值?

javascript

我正在从Angular的文档中查看此示例,$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就是一个类型为Promise的对象Object。这不是一个Number。那么,“它的值将是promiseA的结果增加1”的含义是什么?

我应该以这种方式访问promiseB.value吗?成功回调如何返回承诺并返回“结果+ 1”?我想念一些东西。


阅读 353

收藏
2020-05-01

共1个答案

一尘不染

promiseAthen函式会传回新的promise(promiseB),promiseA该函式在解析后会立即解析,其值就是内从Success函数传回的值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,因为我们已经使用展开了promiseA的结果await,您可以直接使用它。

但是,await只能在async函数内部使用。因此,要略微缩小,必须像上面这样包含:

async function doSomething() {
    let result = await functionThatReturnsPromiseA();
    return result + 1;
}
2020-05-01