我正在使用babel(env)编译代码,编译为ES5。
以下是代码:
(async () => {
const p = async () => {
return new Proxy({}, {
get: (target, property) => {
console.log(property);
}
})
};
const r = await p();// await calls .then on the result of p()
})();
答案 0 :(得分:5)
它实际上发生了两次。
为什么在
.then()
返回的代理上触发了async function
?
async function
调用的结果是使用函数正文评估中的return
值已解析的承诺。解析promise会检查分辨率值是否为thenable(“类似承诺的值”),这将导致承诺等待内部结果。 (在您的情况下,访问代理上的.then
不会返回一个函数,因此它不被认为是一个可以使用代理完成的承诺)。
为什么
await
会在代理上触发.then()
?
同样在这里。 await
不仅适用于promises,它适用于任意值。为了确定他们的“承诺 - 价值”,它运行完全相同的检查 - 它解决了一个等待价值的承诺,然后等待承诺解决。