1
A
回答
4
是的,這是可能的。你必須包裝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規範的進一步細節(與默認處理程序「投擲者」和「身份」)。
相關問題
- 1. 等待原生ES6承諾在Rails集成測試中解決?
- 2. TypeScript覆蓋ES6承諾與藍鳥
- 3. 創建尚未解決的承諾es6
- 4. 承諾是解決
- 5. 可以從承諾鏈內解決嗎?
- 6. 用原型繼承覆蓋方法
- 7. ES6解構的承諾?
- 8. ES6承諾是否取代對async.js方法的需求?
- 9. 解決方法git的承諾
- 10. 承諾解決方案通過承諾,而不是價值
- 11. 無法解決承諾
- 12. 是否可以覆蓋NSUserDefault?
- 13. 使用JavaScript覆蓋原生方法
- 14. 是否可以向JQuery的承諾對象添加方法?
- 15. AngularJS解決承諾
- 16. 使用承諾內解決承諾
- 17. 解決承諾內的多重承諾
- 18. 是否可以繼承不變的日期類並覆蓋__str__方法?
- 19. 我可以控制由then()方法返回的承諾的方式解決
- 20. 等待要解決的承諾,以解決在Angular.js中的另一個承諾
- 21. 承諾解決之前內部承諾解決
- 22. 覆蓋繼承的方法
- 23. 解決$ q.all中Angularjs承諾的正確方法是什麼?qiall
- 24. Javascript承諾鏈 - ES6
- 25. 取消ES6承諾
- 26. 承諾在JavaScript(ES6)
- 27. ES6嵌套承諾
- 28. 承諾es6和superagent
- 29. ES6異步承諾
- 30. 混合firebase承諾與ES6承諾
你試過了嗎?我的意思是如果你能夠覆蓋整個Promise對象,那麼這是可能的。如果你不能那麼我會想象你只能夠改變原型承諾對象,而不是基地Promise對象本身 – Binvention
因爲你使用es6,我寧願繼續並創建一個包裝類 – harishr
你能顯示一個例子?請記住,我想保留Promise類名。 –