首页 > 解决方案 > 如何使 JavaScript 代理的处理程序方法成为异步函数?

问题描述

请参阅有关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);

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

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

标签: javascriptproxyasync-awaithandler

解决方案


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

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


推荐阅读