如何使 JavaScript Proxy 的处理程序方法成为异步函数?

tig*_*mos 5 javascript handler async-await es6-proxy

请参阅 Mozilla 文档中有关Proxy()的内容

一个简单的代理示例:

const handler = {
  get: function(target, prop, receiver) {
    return Reflect.get(target, prop, receiver);
  },
  set: function(target, prop, receiver) {
    return Reflect.set(target, prop, receiver);
  }
};

const proxy = new Proxy(target, handler);
Run Code Online (Sandbox Code Playgroud)

get我在and中有一些异步函数set,所以我想让getsetto 成为async函数。

我期望类似的东西:

const handler = {
  get: async function(target, prop, receiver) {
    await foo();
    return Reflect.get(target, prop, receiver);
  },
  set: async function(target, prop, receiver) {
    await bar();
    return Reflect.set(target, prop, receiver);
  }
};

const proxy = new Proxy(target, handler);

await (proxy.prop1 = xxx);
yyy = await proxy.prop2;
Run Code Online (Sandbox Code Playgroud)

我怎样才能实现我的目标?谢谢!

Ber*_*rgi 2

这不可能。赋值表达式proxy.property = value始终为1value,而不是代理set陷阱的某些返回值。你不能让它返回一个await有能力的承诺。

1:除非分配(包括代理陷阱)当然抛出异常。