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

How to make JavaScript Proxy's handler methods to be async functions?

参考有关 Proxy()

的 Mozilla 文档

一个简单的代理示例:

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);

我在getset中有一些异步函数,所以我想让getset成为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;

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

这是不可能的。赋值表达式 proxy.property = value 总是 1 的计算结果为 value,而不是代理的 set 陷阱的某些 return 值。你不能使它 return 成为 await 可行的承诺。

1: 除非赋值,包括代理陷阱,当然抛出异常。