Files
leporello-js/src/patch_promise.js

43 lines
958 B
JavaScript
Raw Normal View History

2022-12-02 04:13:32 +08:00
export const patch_promise = window => {
2022-12-16 13:15:27 +08:00
2022-12-02 04:13:32 +08:00
if(window.Promise.Original != null) {
2022-12-07 05:06:15 +08:00
// already patched
return
2022-12-02 04:13:32 +08:00
}
class PromiseWithStatus extends Promise {
constructor(fn) {
2022-12-16 13:15:27 +08:00
const p = new Promise.Original((resolve, reject) => {
fn(
(value) => {
if(value instanceof window.Promise) {
value
.then(v => {
p.status = {ok: true, value: v}
resolve(v)
})
.catch(e => {
p.status = {ok: false, error: e}
reject(e)
})
} else {
p.status = {ok: true, value}
resolve(value)
}
},
(error) => {
p.status = {ok: false, error}
reject(error)
},
)
})
return p
2022-12-02 04:13:32 +08:00
}
}
PromiseWithStatus.Original = Promise
window.Promise = PromiseWithStatus
}