react-native-web-headroom
Version:
React Native Web Headroom
69 lines (52 loc) • 1.75 kB
JavaScript
;
var requirePromise = require('./requirePromise');
requirePromise();
var ES = require('es-abstract/es7');
var bind = require('function-bind');
var promiseResolve = function PromiseResolve(C, value) {
return new C(function (resolve) {
resolve(value);
});
};
var OriginalPromise = Promise;
var createThenFinally = function CreateThenFinally(C, onFinally) {
return function (value) {
var result = onFinally();
var promise = promiseResolve(C, result);
var valueThunk = function () {
return value;
};
return promise.then(valueThunk);
};
};
var createCatchFinally = function CreateCatchFinally(C, onFinally) {
return function (reason) {
var result = onFinally();
var promise = promiseResolve(C, result);
var thrower = function () {
throw reason;
};
return promise.then(thrower);
};
};
var then = bind.call(Function.call, OriginalPromise.prototype.then);
var promiseFinally = function finally_(onFinally) {
/* eslint no-invalid-this: 0 */
var promise = this;
then(promise, null, function () {}); // throw if IsPromise(this) is false; catch() to avoid unhandled rejection warnings
var C = ES.SpeciesConstructor(promise, OriginalPromise); // may throw
var thenFinally = onFinally;
var catchFinally = onFinally;
if (ES.IsCallable(onFinally)) {
thenFinally = createThenFinally(C, onFinally);
catchFinally = createCatchFinally(C, onFinally);
}
return promise.then(thenFinally, catchFinally);
};
if (Object.getOwnPropertyDescriptor) {
var descriptor = Object.getOwnPropertyDescriptor(promiseFinally, 'name');
if (descriptor && descriptor.configurable) {
Object.defineProperty(promiseFinally, 'name', { configurable: true, value: 'finally' });
}
}
module.exports = promiseFinally;