我正在查看 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
是一个 Promise 对象,类型为 Object
。它不是一个 Number
。那么“它的值将是 promiseA 加 1 的结果”是什么意思呢?
我应该以 promiseB.value
或类似的方式访问它吗?成功回调如何返回一个承诺并返回“result + 1”?我错过了一些东西。
原文由 temporary_user_name 发布,翻译遵循 CC BY-SA 4.0 许可协议
promiseA
的then
函数返回一个新的 promise (promiseB
),它在promiseA
被解析后立即被解析,它的值是从promiseA
中的成功函数返回的值。在这种情况下,
promiseA
使用 value-result
解析,然后立即使用result + 1
解析promiseB
。访问
promiseB
的值的方式与访问promiseA
的结果相同。_2019 年 12 月编辑_:
async
/await
现在是 JS 中的标准,它允许使用上述方法的替代语法。你现在可以写:现在没有promiseB,因为我们已经使用
await
解开了promiseA 的结果,你可以直接使用它。但是,
await
只能在async
函数内部使用。所以要稍微缩小一点,上面的内容必须像这样包含:而且,为了清楚起见,这个例子中函数
doSomething
的返回值仍然是一个承诺——因为异步函数返回承诺。因此,如果您想访问该返回值,则必须执行result = await doSomething()
,您只能在另一个异步函数中执行此操作。基本上,只有在父异步上下文中,您才能直接访问从子异步上下文生成的值。