mirror of
https://github.com/leporello-js/leporello-js
synced 2026-01-13 13:04:30 -08:00
fix
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
export const patch_promise = window => {
|
||||
|
||||
|
||||
if(window.Promise.Original != null) {
|
||||
// already patched
|
||||
return
|
||||
@@ -7,31 +7,42 @@ export const patch_promise = window => {
|
||||
|
||||
class PromiseWithStatus extends Promise {
|
||||
constructor(fn) {
|
||||
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)
|
||||
},
|
||||
)
|
||||
})
|
||||
|
||||
let status
|
||||
let is_constructor_finished = false
|
||||
const p = new Promise.Original(
|
||||
(resolve, reject) => {
|
||||
fn(
|
||||
(value) => {
|
||||
if(value instanceof window.Promise.Original) {
|
||||
value
|
||||
.then(v => {
|
||||
p.status = {ok: true, value: v}
|
||||
resolve(v)
|
||||
})
|
||||
.catch(e => {
|
||||
p.status = {ok: false, error: e}
|
||||
reject(e)
|
||||
})
|
||||
} else {
|
||||
status = {ok: true, value}
|
||||
if(is_constructor_finished) {
|
||||
p.status = status
|
||||
}
|
||||
resolve(value)
|
||||
}
|
||||
},
|
||||
(error) => {
|
||||
status = {ok: false, error}
|
||||
if(is_constructor_finished) {
|
||||
p.status = status
|
||||
}
|
||||
reject(error)
|
||||
},
|
||||
)
|
||||
}
|
||||
)
|
||||
is_constructor_finished = true
|
||||
p.status = status
|
||||
return p
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user