8

我正在用 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()
})();

4

1 回答 1

7

它实际上发生了两次。

为什么.then()在 Proxy 返回的 Proxy 上触发async function

调用的结果是一个用函数体评估的值解决async function的承诺。解析一个promise会检查解析值是否是一个thenable(“promise-like value”),这将导致promise等待内部结果。(在您的情况下,在代理上访问不会返回函数,因此它不被视为 thenable 并且代理实现了承诺)。return.then

为什么会在代理上await触发?.then()

同样在这里。await不仅适用于承诺,它适用于任意值。为了确定它们的“promise-worthiness”,它运行完全相同的 thenable 检查——它用 awaited 值解决一个 promise,然后等待 promise 解决。

于 2018-01-18T12:49:30.413 回答