Alexandroppolus, концептуально как-то так:
(function(prototype){
const then = prototype.then;
prototype.state = 'pending';
prototype.then = function(){
const next = then.apply(
then.call(
this,
resolve => {
this.state = 'fulfilled';
return resolve;
},
reject => {
this.state = 'rejected';
throw reject;
}
),
arguments
);
return next;
}
}(Promise.prototype));
+для Promise.resolve/reject надо перегрузку, ешё мб что-то с catch и final.
+отдельно обработку для случаев когда promise возвращает не promise(передавать в таких случаях статус с this на next, ибо оный в любом случае не поменяется)
+ ...