(另请参阅这个答案。)
当我重新定义Promise
类(使用如下所示的“monkey-patch”)时,这不会影响由本机函数返回的承诺,例如fetch
:
Promise = class extends Promise {
constructor(executor) {
console.log("Promise created");
super(executor);
}
}
console.log("Non-native promise");
Promise.resolve(1);
console.log("Native promise");
fetch("https://httpbin.org/delay/1");
console.log("Native promise");
document.hasStorageAccess();
当我在浏览器中运行此代码片段时,由创建的承诺使用了重新定义(因此记录了“创建的承诺”),但由或Promise.resolve
返回的承诺却没有。fetch
document.hasStorageAccess
(当我在 Node.js 中尝试它时,fetch
使用重新定义,所以它实际上取决于实现。)
有没有办法重新定义,Promise
使得本机浏览器功能也可以使用这种重新定义?