(Veja também esta resposta .)
Quando eu redefini a Promise
classe (com um "monkey-patch" como mostrado abaixo), isso não afeta as promessas que são retornadas por uma função nativa como 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();
Quando executo esse snippet no navegador, a promessa criada por Promise.resolve
usa a redefinição (de modo que "Promessa criada" é registrada), mas as promessas retornadas por fetch
ou document.hasStorageAccess
não.
(Quando tento no Node.js, fetch
ele usa a redefinição, então realmente depende da implementação.)
Existe uma maneira de redefinir Promise
de forma que a redefinição também seja usada pelas funções nativas do navegador?