gpt4 book ai didi

javascript - 如何在 JavaScript es6 中代理 Promise

转载 作者:数据小太阳 更新时间:2023-10-29 05:15:13 24 4
gpt4 key购买 nike

我正在尝试在 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

绑定(bind)版本
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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com