123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- "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) })
- }
- }
|