diff options
author | Florian Dold <florian.dold@gmail.com> | 2017-05-28 00:38:50 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2017-05-28 00:40:43 +0200 |
commit | 7fff4499fd915bcea3fa93b1aa8b35f4fe7a6027 (patch) | |
tree | 6de9a1aebd150a23b7f8c273ec657a5d0a18fe3e /node_modules/release-zalgo/lib/Thenable.js | |
parent | 963b7a41feb29cc4be090a2446bdfe0c1f1bcd81 (diff) |
add linting (and some initial fixes)
Diffstat (limited to 'node_modules/release-zalgo/lib/Thenable.js')
-rw-r--r-- | node_modules/release-zalgo/lib/Thenable.js | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/node_modules/release-zalgo/lib/Thenable.js b/node_modules/release-zalgo/lib/Thenable.js new file mode 100644 index 000000000..7a809b266 --- /dev/null +++ b/node_modules/release-zalgo/lib/Thenable.js @@ -0,0 +1,39 @@ +'use strict' + +const constants = require('./constants') +const unwrapSync = require('./unwrapSync') + +// Behaves like a Promise, though the then() and catch() methods are unbound and +// must be called with the instance as their thisArg. +// +// The executor must either return a value or throw a rejection reason. It is +// not provided resolver or rejecter methods. The executor may return another +// thenable. +class Thenable { + constructor (executor) { + try { + this.result = unwrapSync(executor()) + this.state = constants.RESOLVED + } catch (err) { + this.result = err + this.state = constants.REJECTED + } + } + + then (onFulfilled, onRejected) { + if (this.state === constants.RESOLVED && typeof onFulfilled === 'function') { + return new Thenable(() => onFulfilled(this.result)) + } + + if (this.state === constants.REJECTED && typeof onRejected === 'function') { + return new Thenable(() => onRejected(this.result)) + } + + return this + } + + catch (onRejected) { + return this.then(null, onRejected) + } +} +module.exports = Thenable |