Ste*_*rov 2 javascript ecmascript-6 es6-promise
我知道这不是覆盖本机JS API的最佳方法,我会做更多的实验。
我想覆盖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);
Run Code Online (Sandbox Code Playgroud)
这段代码将无法拦截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;
Run Code Online (Sandbox Code Playgroud)
它Promise用您的实现替换了全局属性,因此所有解析为的后续调用都window.Promise将返回您的实现。
有关更多详细信息,请参见规范中的25.4.5.3 Promise.prototype.then(默认处理程序为“ thower”和“ identity”)。
| 归档时间: |
|
| 查看次数: |
1196 次 |
| 最近记录: |