作者热门文章
- xml - AJAX/Jquery XML 解析
- 具有多重继承的 XML 模式
- .net - 枚举序列化 Json 与 XML
- XML 简单类型、简单内容、复杂类型、复杂内容
我正在尝试在 native Firefox 中代理 Promise(并使用 Babel)。
var prom = new Promise(function(resolve, reject){resolve(42)});
var promProxy = new Proxy(prom, {});
promProxy.then(function(response){console.log(response)});
这不起作用,我收到“TypeError:‘then’调用了一个未实现接口(interface) Promise 的对象。”
最佳答案
你需要有你的处理程序 implement the get() trap并返回 prom.then
var prom = new Promise(function(resolve, reject){resolve(42)});
var promProxy = new Proxy(prom, {
get: function(target, prop) {
if (prop === 'then') {
return target.then.bind(target);
}
}
});
promProxy.then(function(response){console.log(response)});
请注意,如果您只想代理所有 访问器,get
函数将如下所示:
var promProxy = new Proxy(prom, {
get: function(target, prop) {
var value = target[prop];
return typeof value == 'function' ? value.bind(target) : value;
}
});
bind
将确保在您处理原生对象(例如 Promises 或控制台)时不会错误地调用该函数。
编辑:在某些情况下浏览器/节点将有一个过时的代理版本,在这种情况下你会想要使用 harmony-reflect使其保持最新状态。
关于javascript - 如何在 JavaScript es6 中代理 Promise,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30819290/
我是一名优秀的程序员,十分优秀!