如何在JavaScript es6中代理承诺
我正试图在原生Firefox中代理一个承诺(并使用Babel)如何在JavaScript es6中代理承诺,javascript,proxy-classes,es6-promise,Javascript,Proxy Classes,Es6 Promise,我正试图在原生Firefox中代理一个承诺(并使用Babel) var prom=newpromise(函数(解析,拒绝){resolve(42)}); var promProxy=新代理(prom,{}); 然后(函数(响应){console.log(响应)})您需要处理程序并返回绑定版本的prom。然后 var prom = new Promise(function(resolve, reject){resolve(42)}); var promProxy = new Proxy(prom
var prom=newpromise(函数(解析,拒绝){resolve(42)});
var promProxy=新代理(prom,{});
然后(函数(响应){console.log(响应)})代码>您需要处理程序并返回绑定版本的prom。然后
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
将确保在处理本机对象(如承诺)或控制台时不会错误调用该函数
编辑:在某些情况下,浏览器/节点的代理版本会过时,在这种情况下,您需要使用它更新代理版本。嗯,这个问题是如何代理承诺。我来到这里是想了解如何承诺代理——或者更准确地说,如何解决代理。我怀疑其他人也会在这里着陆,所以我会把这个贴在这里,以防万一
我已经有了一个很好的工作代理对象,然后我去尝试用承诺来包装它:
var p = new Promise(function(resolve, reject) {
var proxy = get_my_proxy();
resolve(proxy);
});
您难道不知道吗,然后darn resolve方法向我的代理请求then
属性(这是我的代理逻辑意外的,导致它抛出)。这可能并不理想,这取决于您的代理的用途,但下面是我如何解决这一问题的(适当地说,因为我的问题与此相反,我的解决方案也是相反的)——为返回null
,然后——从而让resolve()
知道我没有通过承诺(又名表格
)
你为什么要这样做?事实上,promise的代理不是原生promise对象。也许你在寻找子类化?只是遇到了这个问题,感谢你的回答
get: function(target, prop) {
if (prop === 'then') return null; // I'm not a Thenable
// ...the rest of my logic
}