$
This commit is contained in:
39
node_modules/release-zalgo/lib/Thenable.js
generated
vendored
Normal file
39
node_modules/release-zalgo/lib/Thenable.js
generated
vendored
Normal file
@@ -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
|
Reference in New Issue
Block a user