您需要让您的处理程序实现 get() 陷阱并返回的绑定版本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 或控制台之类的 Native 对象时不会错误地调用该函数。
编辑:在某些情况下,浏览器/节点会有一个过时的代理版本,在这种情况下,您需要使用Harmony-reflect来更新它。