为什么'await'触发'.then()'在'async'函数返回的代理上?

时间:2018-01-18 10:17:31

标签: javascript ecmascript-6 babeljs es6-promise es6-proxy

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

1 个答案:

答案 0 :(得分:5)

它实际上发生了两次。

  

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

async function调用的结果是使用函数正文评估中的return已解析的承诺。解析promise会检查分辨率值是否为thenable(“类似承诺的值”),这将导致承诺等待内部结果。 (在您的情况下,访问代理上的.then不会返回一个函数,因此它不被认为是一个可以使用代理完成的承诺)。

  

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

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