Promise.prototype.PromiseFinally = function (callback) {
let p = this.constructor;
console.log(this)
return this.then(value=>{
return Promise.resolve(callback()).then(value=>value);
}, reason =>{
return Promise.resolve(callback()).then(()=>{
throw reason
})
})
}
function p1() {
return new Promise(function(resolve, reject) {
resolve(1000)
})
}
function p2() {
return new Promise(function(resolve, reject) {
reject('errror')
})
}
p1().PromiseFinally(()=>{
console.log('finally called')
}).then(value=>{
console.log(value)
})