gpt4 book ai didi

javascript - 是否可以覆盖原生 Es6 promise resolve 方法?

转载 作者:行者123 更新时间:2023-11-29 16:51:14 25 4
gpt4 key购买 nike

I know that it's not the best approach to overwrite native JS API and I do it more for experiment.

我想覆盖 Promise 解析方法处理程序,以便对每个解析执行一些额外的逻辑。可能吗?

最佳答案

是的,这是可能的。你必须包装 Promise.prototype.then 方法。

Promise.prototype.then = (oldThen=>{
return function then(_successHandler, _rejectHandler){
/* your logic here;
remember: both successHandler and rejectHandler can be non-functions */
return oldThen.call(this, wrappedSuccessHandler, wrappedRejectHandler);
}
})(Promise.prototype.then);

此代码将无法拦截 new Promise() 调用,但还有其他解决方法:

class SubPromise extends Promise {
constructor(executor) {
super(function(_resolve, _reject) {
/* your code goes here */
return executor(wrappedResolve, wrappedReject);
});
}

then(success, reject) {
return super.then(wrappedSuccessHandler, wrappedRejectHandler);
}
}
window.Promise = SubPromise;

它将全局 Promise 属性替换为您的实现,因此解析为 window.Promise 的所有后续调用都将返回您的实现。

参见 25.4.5.3 Promise.prototype.then在规范中获取更多详细信息(使用默认处理程序“thrower”和“identity”)。

关于javascript - 是否可以覆盖原生 Es6 promise resolve 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35971958/

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