mirror of
https://github.com/JonasunderscoreJones/api-worker.git
synced 2025-10-23 10:29:19 +02:00
51 lines
No EOL
1.3 KiB
JavaScript
51 lines
No EOL
1.3 KiB
JavaScript
"use strict";
|
|
|
|
/* ------------------------------------------------------------------------ */
|
|
|
|
module.exports = class SyncPromise {
|
|
|
|
constructor (fn) {
|
|
try {
|
|
fn (
|
|
x => { this.setValue (x, false) }, // resolve
|
|
x => { this.setValue (x, true) } // reject
|
|
)
|
|
} catch (e) {
|
|
this.setValue (e, true)
|
|
}
|
|
}
|
|
|
|
setValue (x, rejected) {
|
|
this.val = (x instanceof SyncPromise) ? x.val : x
|
|
this.rejected = rejected || ((x instanceof SyncPromise) ? x.rejected : false)
|
|
}
|
|
|
|
static valueFrom (x) {
|
|
if (x instanceof SyncPromise) {
|
|
if (x.rejected) throw x.val
|
|
else return x.val
|
|
} else {
|
|
return x
|
|
}
|
|
}
|
|
|
|
then (fn) {
|
|
try { if (!this.rejected) return SyncPromise.resolve (fn (this.val)) }
|
|
catch (e) { return SyncPromise.reject (e) }
|
|
return this
|
|
}
|
|
|
|
catch (fn) {
|
|
try { if (this.rejected) return SyncPromise.resolve (fn (this.val)) }
|
|
catch (e) { return SyncPromise.reject (e) }
|
|
return this
|
|
}
|
|
|
|
static resolve (x) {
|
|
return new SyncPromise (resolve => { resolve (x) })
|
|
}
|
|
|
|
static reject (x) {
|
|
return new SyncPromise ((_, reject) => { reject (x) })
|
|
}
|
|
} |