为什么 'await' 在 'async' 函数返回的代理上触发 '.then()'?
Why does 'await' trigger '.then()' on a Proxy returned by an 'async' function ?
我正在用 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()
})();
实际上发生了两次。
Why is .then()
triggered on a Proxy returned by an async function
?
async function
调用的结果是一个 已解决 的承诺,其 return
值来自函数体评估。解决承诺会检查解决值是否为 thenable("promise-like value"),这将导致承诺等待内部结果。 (在您的情况下,在代理上访问 .then
不是 return 函数,因此它不被认为是 thenable 并且承诺由代理实现)。
Why does await
trigger .then()
on a Proxy?
这里也一样。 await
不仅适用于承诺,它适用于任意值。为了确定它们的 "promise-worthiness",它运行完全相同的 thenable 检查 - 它用等待的值解析一个承诺,然后等待承诺结算。
我正在用 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()
})();
实际上发生了两次。
Why is
.then()
triggered on a Proxy returned by anasync function
?
async function
调用的结果是一个 已解决 的承诺,其 return
值来自函数体评估。解决承诺会检查解决值是否为 thenable("promise-like value"),这将导致承诺等待内部结果。 (在您的情况下,在代理上访问 .then
不是 return 函数,因此它不被认为是 thenable 并且承诺由代理实现)。
Why does
await
trigger.then()
on a Proxy?
这里也一样。 await
不仅适用于承诺,它适用于任意值。为了确定它们的 "promise-worthiness",它运行完全相同的 thenable 检查 - 它用等待的值解析一个承诺,然后等待承诺结算。