为什么 '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 检查 - 它用等待的值解析一个承诺,然后等待承诺结算。