javascript - 如何使 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
,所以我想让get
和set
成为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
陷阱的某个返回值。你不能让它返回一个有await
能力的承诺。
1:除非分配,包括代理陷阱,当然会抛出异常。
推荐阅读
- java - 将 Long 转换为 LocalDateTime
- python - 从文本中删除一组特定字符(在python中)
- c - BME680 空气质量值
- jmeter - 在单个请求中两次传递 DBID 值
- python - pipenv jupyter notebook matplotlib moviepy TypeError
- networkx - Networkx OSMNX 和 Folium 绘制不同颜色的边缘
- javascript - Multer不将文件保存在文件夹中
- python - 为什么在区分时间序列时会出现长度不匹配错误?
- winapi - WinAPI 子窗口的 Z 顺序
- python - 我似乎无法通过 xpath 从页面获取信息